python 文件读写操做(24)

之前的代码都是直接将数据输出到控制台,实际上咱们也能够经过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操做。文件I/O操做一共分为四部分:打开(open)/读取(read)/写入(write)/关闭(close)……python

歪

一.文件的打开 open

在python中打开文件使用函数open(),该函数返回文件句柄,具体使用方法以下:微信

1ide

2函数

3编码

4spa

5指针

file = open("文件名","打开文件模式")code

 

# 示例代码:orm

# 打开d:/1.txt文件,若是d盘没有这个文件,会自动在d盘建立1.txt的空白文件,file是返回的文件句柄供读/写/关闭文件操做blog

file = open("d:/1.txt","wb")

其中,打开文件模式有如下几种类型:

open

 

二.文件的关闭 close

文件在打开读写以后记得要有关闭操做,就比如蹲完坑得擦屁股,关闭文件使用close()函数。注意:文件关闭以后,不能在继续对文件读写操做,若是须要读写操做须要从新open()打开文件。

蹲坑

 

1

file.close() # 关闭文件

 

三.文件的读取 read

文件打开以后,能够经过返回的文件句柄读取文件中的内容,文件读取有如下几个函数:

1.file.read( [count] ) — count表示须要读取的文字长度,conut是缺省参数,若是没有设置count值,默认读取整个文件全部内容,该函数返回读取到的内容;

2.file.readline() — 读取文件一行数据,返回读取的内容

3.file.readlines() — 读取文件的全部行内容,返回读取的全部内容,注意:返回的数据类型是列表,列表中每一个数据都是文件中的一行数据;

4.注意:文件读取返回的内容并不是字符串str类型,而是字节类型bytes类型,b’ ‘前缀表明的就是bytes.  

 

若是想将bytes类型转为字符串直接使用bytes.decode()便可,decode()默认使用utf-8编码;

假如d:/1.txt中的内容以下:

1

2

3

@Blog(我的博客地址): shuopython.com

@WeChat Official Account(微信公众号):猿说python

@Motto:不积跬步无以致千里,不积小流无以成江海,程序人生的精彩须要坚持不懈地积累!

文件读取的三种方式示例代码以下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# 方法一:

print("方法一:使用 read() 函数读取txt内容")

file_object = open("d:/1.txt","rb")

contents = file_object.read() # 默认读取全部内容

 

# 读取文件内容,若是文件中含有中文须要decode()解码,不然中文没法显示

print(contents)

print("---"*20)

# 使用decode()解码中文,默认解码格式为utf-8

print("使用decode()函数解码中文:")

print(contents.decode())

file_object.close()

 

print("***"*20)

# 方法二:

print("方法二:使用 readline() 函数读取txt内容")

file_object = open("d:/1.txt","rb")

while True:

    contents = file_object.readline()

    print(contents.decode())# 使用decode()解码中文,默认解码格式为utf-8

    if len(contents) == 0: # 读取内容长度为0,读取结束

        break

file_object.close()

 

print("***"*20)

# 方法三:

print("方法三:使用 readlines() 函数读取txt内容")

file_object = open("d:/1.txt","rb")

# readlines() 返回列表,一行数据就是列表中的一个元素

contents = file_object.readlines()

# 遍历列表

for content in contents:

    print(content.decode())# 使用decode()解码中文,默认解码格式为utf-8

file_object.close()

输出结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

方法一:使用 read() 函数读取txt内容

 

b'@Blog(\xe4\xb8\xaa\xe4\xba\xba\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9c\xb0\xe5\x9d\x80): shuopython.com\r\n@WeChat Official Account(\xe5\xbe\xae\xe4\xbf\xa1\xe5\x85\xac\xe4\xbc\x97\xe5\x8f\xb7)\xef\xbc\x9a\xe7\x8c\xbf\xe8\xaf\xb4python\r\n@Motto:\xe4\xb8\x8d\xe7\xa7\xaf\xe8\xb7\xac\xe6\xad\xa5\xe6\x97\xa0\xe4\xbb\xa5\xe8\x87\xb3\xe5\x8d\x83\xe9\x87\x8c\xef\xbc\x8c\xe4\xb8\x8d\xe7\xa7\xaf\xe5\xb0\x8f\xe6\xb5\x81\xe6\x97\xa0\xe4\xbb\xa5\xe6\x88\x90\xe6\xb1\x9f\xe6\xb5\xb7\xef\xbc\x8c\xe7\xa8\x8b\xe5\xba\x8f\xe4\xba\xba\xe7\x94\x9f\xe7\x9a\x84\xe7\xb2\xbe\xe5\xbd\xa9\xe9\x9c\x80\xe8\xa6\x81\xe5\x9d\x9a\xe6\x8c\x81\xe4\xb8\x8d\xe6\x87\x88\xe5\x9c\xb0\xe7\xa7\xaf\xe7\xb4\xaf\xef\xbc\x81\r\n'

------------------------------------------------------------

使用decode()函数解码中文:

@Blog(我的博客地址): shuopython.com

@WeChat Official Account(微信公众号):猿说python

@Motto:不积跬步无以致千里,不积小流无以成江海,程序人生的精彩须要坚持不懈地积累!

 

************************************************************

方法二:使用 readline() 函数读取txt内容

 

@Blog(我的博客地址): shuopython.com

@WeChat Official Account(微信公众号):猿说python

@Motto:不积跬步无以致千里,不积小流无以成江海,程序人生的精彩须要坚持不懈地积累!

 

 

************************************************************

方法三:使用 readlines() 函数读取txt内容

 

@Blog(我的博客地址): shuopython.com

@WeChat Official Account(微信公众号):猿说python

@Motto:不积跬步无以致千里,不积小流无以成江海,程序人生的精彩须要坚持不懈地积累!

 

四.文件的写入 write

文件写入可经过函数write()完成,使用比较简单,先看看语法:

file.write( [bytes] ) — 直接传入 bytes 类型的字符便可,b”   “前缀表明的就是bytes. 

使用比较简单,直接上代码:

1

2

3

4

5

6

7

8

9

file_object = open("d:/2.txt","wb")

 

# '\n' 是文件I/O中的换行符,写完文件以后,自动换行

file_object.write(b"1234567\n")

# 注意单引号和双引号的配合使用

file_object.write(b"file_object.write(b'sad')\n")

file_object.write(b"python \n")

 

file_object.close()

d:/2.txt 的内容以下:

1

2

3

1234567

file_object.write(b'sad')

python

注意:写入方式“wb” ,每次写入文件都会覆盖上一次的内容,即写入以前的内容会被清空;

 

五.文件偏移 seek

有人看了上面read()函数的示例代码可能会以为频繁的打开和关闭文件会比较麻烦。那么仅仅打开和关闭文件一次,经过文件的偏移也能完成上述功能,文件的偏移使用 seek() 函数 。通常而言,seek()函数和tell()函数都搭配使用:

1.file.seek([offset],[whence]) — whence 表示偏移的位置,0表明从文件开头开始算起,1表明从当前位置开始算起,2表明从文件末尾算起;offset 表示相对whence 偏移多少个字节;

2.file.tell() — 相对于文件开始位置,当前偏移的字节数,该函数也能够用来计算整个文件的bytes长度;

注意:通常只要调用read/readline/readlines/write等函数,文件指针会自动发生偏移。

使用上面两个函数的示例代码以下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

file_object = open("d:/2.txt","rb")

 

# 获取当前的文件偏移,因为还没开始读取内容,偏移量等于 0

count = file_object.tell()

print(count)

# 读取文本全部数据内容,文件自动偏移到文件末尾

contents = file_object.read()

# 获取整个文件的偏移量 ,实际上就是文件内容的大小

count = file_object.tell()

print(count)

# 将文件指针偏移到文件开始位置

file_object.seek(0,0)

# 读取一行数据,按道理讲应该是获取第一行数据

contents = file_object.readline()

print(contents.decode())

# 获取当前偏移量

count = file_object.tell()

print(count)

# 继续读取一行数据

contents = file_object.readline()

print(contents.decode())

# 获取当前偏移量

count = file_object.tell()

print(count)

file_object.close()

输出内容:

1

2

3

4

5

6

0

474

python教程 - 猿说python 第一行数据 www.shuopython.com

68

python教程 - 猿说python 第二行数据 www.shuopython.com

136

 

六.重点总结

1.file.read( [count] )函数能够设置读取指定的长度,例如:只读取10个字符read(10);

2.file.readlines()返回值是列表,并不是bytes类型,而列表中的每个元素都是文件中的一行数据,类型是bytes类型;

3.若是文件读取的内容含有中文,须要经过函数decode()解码转为字符串,decode()默认为utf-8解码;

4.文件open以后记得close,养成良好的书写习惯;

 

 

猜你喜欢:

1.python列表推导式

2.python字典推导式

3.python return逻辑运算

 

转载请注明猿说Python » python文件读写操做