文件的操作
文件操作时,python首先会拿到文件的句柄;
f=open('filename','w',encoding='utf8') #写模式打开文件,拿到文件句柄;f为文件句柄 f=f.read() # 读文件内容 f.close() # 关闭文件,务必要关闭
文件打开模式:
写的时候,光标永远都在最后; r 读模式,只读,不可写; w 写模式,当文件写模式时,就会把原来的数据格式化,然后从0位置开始写;不可读 a append,追加模式,只可在最后追加内容;不可读 r+ 读写模式,类似a模式 w+ 写读模式,也是先清空,然后写,和w模式的区别是可读。 a+ 和a模式的区别的可读。默认光标位置是最后 x create a new file and open it for writing b 二进制模式 t text模式(default) + open a disk file for updating(reading and writing) u universal newline mode(deprecated)
文件按行读:
f=open('filename','w',encoding='utf8') f=f.readline() #从第一行开始读,每执行一次readline就往下移动一行;python中,read到哪个位置,光标就移动到了那里;再读就从光标往后读; f.readlines() #会把全文变成列表;每行是一个元素;
for i in f.readlines(): print(i.strip()) #最好不要这样,因为如果文件很大,f.readlines会全部读取到内存,会搞死内存;可以这样: for i in f: print(i.strip()) # 这里的for循环会 自动把 f做成一个迭代器,每循环一次,从f文件中取一次;
f.tell() 告诉我光标当前所在的位置。字符和当前字符编码有关。 f.seek(0) 光标回到0位置 f.truncate() 截断,需要在文件为a模式才有意义
终极问题:如何修改一个文件
由于磁盘存储机制,直接修改实现不了。只能先生成副本,然后想法删除旧文件,把新副本名字改回去。 f_read=open('小重山','r',encoding='utf8') f_write = open('小重山2','w',encoding='utf8') number=0 for line in f_read: number+=1 if number==5: line=''.join([line.strip(),'alex ']) # line='hello 岳飞 ' f_write.write(line) f_read.close() f_write.close()
因为文件中只能存储字符串,所以假如有字典要存储在文件中,需要先将字典转换为字符串;用的时候需要使用eval转换回默认类型;如:
a={'beijing':{'1':10000}} #a为一个字典 a=str(a) #强转为字符串 '{'beijing':{'1':10000}}' #这样等把a从文件中取出来时,还是字符串,不能使用字典的方法。要转回字典: a=eval(a)
如果打开一个文件,忘记关闭了,怎么办?with方法可以解决。
f=open('log','r') # 等效于 with open('log','r') as f:
并且with中,可以同时打开两个文件,拿到两个文件句柄:
with open('log1','r') as f1,open('log2','w') as f2: