python3:⽂件读写+withopenas语句转载请表明出处:
前提:⽂中例⼦介绍test.json内容:
hello
我们
326342
1.⽂件读取
(1)打开⽂件open,默认是已读模式打开⽂件
f = open('../dataconfig/test.json')
ad())
f.close()
输出结果:
hello
鎴戜滑
326342
read():⼀次性读取⽂件所有内容
输出结果中出现乱码:需要给open函数传⼊encoding参数
f = open('../dataconfig/test.json',encoding='utf-8')
ad())
f.close()
输出结果:
hello
我们
326342
(2)read(size):读取部分数据
f = open('../dataconfig/test.json',encoding='utf-8')
ad(3))
f.close()
输出结果: hel
(3)redline():每次读取⼀⾏数据,逐⾏读取⽂件内容
f = open('../dataconfig/test.json',encoding='utf-8')
data = f.readline()
while data:
print(data)
data = f.readline()
f.close()
输出结果:
hello
我们
326342
输出结果中每⼀⾏数据读取之后都会空⼀⾏,解决⽅案:print(data.strip())或者print(data,end='')
(4)readlines():读取⽂件所有⾏
f = open('../dataconfig/test.json',encoding='utf-8')
data = f.readlines()
print(data)
print(type(data))
for line in data:
print(line.strip())
python怎么读文件f.close()
输出结果:
['hello\n', '我们\n', '326342']
<class'list'>
hello
我们
326342
(5)line():读取某个特定⾏数据
import linecache
data = line('../dataconfig/test.json',1)
print(data)
输出结果:
hello
总结:不同场景下读取⽅式选择
如果⽂件很⼩,read()⼀次性读取最⽅便
如果不能确定⽂件⼤⼩,反复调⽤read(size)⽐较保险
如果是配置⽂件,调⽤readlines()最⽅便;redlines()读取⼤⽂件会⽐较占内存
如果是⼤⽂件,调⽤redline()最⽅便
如果是特殊需求输出某个⽂件的n⾏,调⽤linecache模块
2.⽂件写⼊
(1)'w'就是writing,以这种模式打开⽂件,原来⽂件中的内容会被新写⼊的内容覆盖掉,如果⽂件不存在,会⾃动创建⽂件
f = open('../dataconfig/test.json','w')
f.write('hello,world!')
f.close()
test.json⽂件内容:hello,world!
(2)‘’a’就是appendin:⼀种写⼊模式,写⼊的内容不会覆盖之前的内容,⽽是添加到⽂件中
f = open('../dataconfig/test.json','a')
f.write('hello,world!')
f.close()
test.json⽂件内容:
hello
我们
326342hello,world!
3.上述读写⽂件例⼦看出,每次读写完之后,都要f.close()关闭⽂件,因为⽂件对象会占⽤操作系统的资源,并且操作系统同⼀时间能打开的⽂件数量也是有限的。
但是实际中,⽂件读写可能产⽣IOError,⼀旦出错,后⾯的f.close()就不会调⽤。所以,为了保证任何时候都能关闭⽂件,可以使⽤try-finally来实现(finally内的代码不管有⽆异常发⽣,都会执⾏)
try:
f = open('../dataconfig/test.json', 'r')
ad())
finally:
if f:
f.close()
每次都这样写实在是⿇烦,python中的with语句⽤法可以实现
with open('../dataconfig/test.json',encoding='utf-8') as f:
ad())
输出结果:
hello
我们
326342
打开多个⽂件进⾏操作:
with open('../dataconfig/test.json',encoding='utf-8') as f1,open('../dataconfig/test1.json',encoding='utf-8') as f2,open('../dataconfig/test2.json',encoding='utf-8') as f3:
for i in f1:
j = f2.readline()
k = f3.readline()
print(i.strip(),j.strip(),k.strip())
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论