Python基础-文件操作
一、打开和关闭文件:
- 打开文件:
f = open('xxx.txt','w') #以写的方式打开一个文件
- 关闭文件:
f = open('xxx.txt','w') f.close() #关闭文件
二、文件的打开模式:
打开模式 | 说明 |
---|---|
r(read) | 以只读的方式打开。文件的指针将会放在文件的开头。这是默认的模式 |
w(write) | 以只写的方式。如果该文件已经存在则将其覆盖。如果不存在,则创建一个文件用于写入。 |
a(append) | 以追加的方式打开文件。如果该文件存在将新的内容追加到文件末尾。如果不存在,则创建新文件用于写入。 |
rb(read binary) | 以二进制的并且只读的方式打开一个文件。文件指针将会放在文件的开头。 |
wb | 以二进制和只写的方式打开一个文件。如果该文件已经存在则将其覆盖。如果该文件不存在,则创建新文件用于写入。 |
ab | 以二进制和追加的方式打开一个文件。如果该文件已经存在则追加到文件末。如果不存在,则创建新文件用于写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。写进去的内容会覆盖原来的内容。 |
w+ | 打开一个文件用于读写。如果该文件已经存在则将其覆盖。如果文件不存在,则创建新文件。 |
a+ | 打开一个文件用于读写,文件指针将会放在文件的结尾。如果文件存在,则会将新内容追加到文件后面。如果文件不存在,则创建新文件。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已经存在则将其覆盖。如果文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已经存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
三、文件的读写操作:
- 读数据:使用read(count)函数可以从文件中读取数据,count表示要从文件中读取的数据的长度。如果没有传,那么表示读取文件中的所有的数据。
fp = open('test.txt','r') # 读取前面5个字节的数据 line = fp.read(5) print(line) # 读取所有的数据 line = fp.read() print(line)
- 读一行的数据:使用
readline
可以以行的形式读取文件。fp = open('test.txt','r') line = fp.readline() print('第一行:%s' % line) line = fp.readline() print('第二行:%s' % line) fp.close()
- 以行的形式把文件中所有的数据都读出来:
readlines
返回一个列表,列表中装的就是文件中每行的数据。fp = open('test.txt','r') lines = fp.readlines() for line in lines: print(line) fp.close()
- 直接迭代文件对象:文件对象也是一个迭代器。即可以通过
for
循环来进行迭代,并且一次性只会读取一行,从而可以读取大文件。fp = open('test.txt','r') for line in fp: print(line)
write
写数据到文件中:write
将数据写入到文件中。fp = open('test.txt','w') fp.write('hello') fp.close()
writelines
写多个数据到文件中:writelines
可以一次性写入多个数据,但是不会自动换行。fp = open('test.txt','w') fp.writelines(['hello','world']) fp.close()
四、文件的定位读写:
-
获取当前文件指针的位置:在读写的过程中,如果想要知道当前文件指针所在的位置,可以通过
tell()
来获取。fp = open('xxx.txt','r') str = fp.read(3) print('读取到的数据是:%s' % str) # 查看当前位置 position = fp.tell() print("当前文件位置:%d" % position) fp.close()
-
定位到某个位置:如果在读写文件的过程中,需要从另外一个位置进行操作,可以使用
seek()
。seek(offset,from)
有2个参数,意义为如下:-
offset:偏移量。
-
from:相对位置。
- 0:表示从文件开头。
- 1:表示从当前位置。
- 2:表示从文件末尾。
但是在Python3中,如果from的值不是等于0,那么offset就必须为0。
# demo1:把相对位置设置为从文件开头,并且向后偏移5个字节。 fp = open("xxx.txt","r") position = fp.tell() print("当前文件指针位置是:%d" % position) fp.seek(5,0) position = fp.tell() print('当前位置是:%d' % position) str = fp.read() print('读取到的字符串:%s' % str)
# demo2:把位置设置为:离文件末尾,3个字节处 fp = open("xxx.txt","r") # 查看当前位置 pos = fp.tell() print('当前文件指针位置:%d' % pos) # 重新设置位置为离文件末尾3个字节位置,会报错 # fp.seek(-3,2) fp.seek(0,2) fp.seek(fp.tell()-3,0) # 读取数据 str = fp.read() # 关闭文件 fp.close()
-
五、关闭文件:
通常来说,一个文件对象在退出程序后会自动关闭。但是对于一些你写入了数据的文件,应该手动的进行关闭。因为Python可能会缓存写入的输入,如果程序抛出异常,那么缓存的文件将不会被写入文件。因此为了安全起见,要在使用完文件后关闭。
一般的写法是:
fp = open("xxx.txt",'r')
try:
# your code
finally:
# 为了安全起见,不管程序有没有发生异常,都要关闭文件
fp.close()
实际上,有专门为这种情况设计的语句,即with
语句:
with open('xxx.txt','r') as fp:
# your code
以上的with
语句,不管程序有没有发生异常,都会关闭文件。with
语句是叫做上下文管理器,上下文管理器是一种支持__enter__
和__exit__
这两个方法的对象。后期会讲到。以后在使用文件操作的时候,应该尽量使用with
语句。
六、案例:
- 拷贝文件。
- 把有病毒的文件修改为正常的代码。