文件读写

一、读写文件
##读文件
f = open('a.txt',encoding='utf-8') #打开一个文件a.txt,有中文的话要加上utf-8
res = f.read()
print(res)
f.close() #代码结束后最好关闭一下文件

##写文件
f = open('a.txt','w',encoding='utf-8') #w模式写文件,但是会清空原有文件;
f.write('6666'+'\n')
f.close()

如果是当前目录下直接写文件名即可,如果是在其他目录下,写成绝对路径;但若是路径中含有\n,那么会转义成换行,所以写路径的时候最好前面加上r或者是再加一个斜杠\
例:
f = open('D:\home\nump\a.txt','w',encoding='utf-8') 这里面的\n就会解析成换行,所以应写成
f = open(r'D:\home\nump\a.txt','w',encoding='utf-8') 或者是
f = open('D:\home\\nump\a.txt','w',encoding='utf-8')

##循环将list内容写入文件
f = open('a.txt','w',encoding='utf-8')
l = ['abc','123','gg','发发发']
for i in l:
f.write(i+'\n') #换行写入文件
f.close()

注:打开文件不要写在循环里面,否则效率低
####################总结一下读写文件的几种模式############################
f = open('a.txt') #不写的话默认是r模式
r 能读,不能写,打开不存在的文件会报错
w 写,不能读,清空以前的内容
a 追加,没有文件会自动创建一个文件,不能读
r+ 写读模式;打开不存在的文件会报错
a+ 追加读写模式,不存在则创建;存在则只追加内容
w+ 写读模式,使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容
readlines 把文件的每一行内容放到list里面,读的时候看文件指针位置,从位置处开始读
readline 一次只读一行
下边的例子中,readline是读一行,读完后用readlines去读的话,应是从上一次文件指针位置处读,即从第二行读文件内容
print(f.readline()) #读第一行内容
print(f.readlines())#从第二行开始读


f = open('a.txt','w')
f.write('hello\n') #只能写字符串
f.writelines('writelinessdhs') #循环传list里每一个元素;可传list、集合,可以循环的都可
f.close()
f.seek(0) #移动文件指针

高效读取文件,直接循环文件对象,循环读每一行内容,循环完了结束;
readlines会一下子读文件中所有内容,可能会一下子撑爆内存,不高效
f = open('a.txt',encoding='utf-8')
for line in f:
print('每一行的内容',line)
还有一种方式:
with open('a.txt','w',encoding='utf-8') as fw: #用这种方式打开文件,不用再写fw.close,会自动判断关闭文件
fw.read()
with open('a.txt','w',encoding='utf-8') as fw1,open('b.txt','w',encoding='utf-8') as fw2: #可以同时打开多个文件,逗号隔开即可
fw1.read()
fw2.read()

二、修改文件
有两种方式
方式一,先读出来所有内容,然后替换,再清空源文件,最好再把替换后的文件写进去
f = open('a.txt','a+',encoding='utf-8')
result = f.read()
new_res = result.replace('a','A') #把a.txt中的a替换为A
f.seek(0)#移动指针至首位
f.truncate() #清空文件内容
f.write(new_res)
f.close()

方式二:逐行修改,大文件最好用此方法
import os
f1 = open('a1.txt',encoding='utf-8')
f2 = open('a2.txt','w',encoding='utf-8') #打开一个空文件a2
for line in f1:
new_line = line.replace('一','1') #将a1中内容替换
f2.write(new_line) #修改后的内容写入a2
f1.close()
f2.close()
os.remove('a1.txt') #删除a1
os.rename('a2.txt','a1.txt')#a2重命名为a1
posted @ 2019-09-14 20:21  哈哈一笑~~~  阅读(175)  评论(0编辑  收藏  举报