我们常常需要将python的数据结果写入到文本文件中,包括csv格式或者txt格式的文件中,目前我大部分都会操作txt文本文件。下面总结一下操作txt格式文件过程中遇到的问题:
1、每次打开文件写入数据都会覆盖里面之前的东西,即循环多次打开一个文件时候,会存在下一次循环将上一次循环的数据覆盖的情况
withopen('C:\\Users\\Administrator\\Desktop\\标注结果.txt', 'a', encoding='UTF-8') asf:
f.write(id + ' '+ title + "\n")
fori inrange(0, tag_num):
sign_result = str(title_signlist[i])
f.write(sign_result + "\n")
f.close()
这是我写的一个小模块的代码,这里想要不覆盖之前的数据,需要将‘a’这个关键的属性放进去,通常我们都用‘w’这个模式,也就是write模式,但是你open一次txt然后怎么写都不会覆盖之前的内容,但是当对同一个文件多次打开关闭写不同的内容时候,需要将‘w’改成‘a’这样就变为add追加模式,这样就可以多次打开相同的文件进行数据写入了。
对于with这个用法,还是比较牛逼的,通常我们都会使用f.open(),f.close(),f.read()这种比较常规的写法,但是存在一种问题就是假如常规写法你读写文件后忘了使用f.colse()关闭文件了,会有两种情况,一种读取文件时候不关闭会浪费资源,另一种写文件时候不关闭会写不全,因为系统只有在内存比较空闲时候才会将缓存中的数据写到txt中,所以只有调用了f.close()方法后才能够彻底将数据写到txt中。这里with就是一个文件读取管家,你用它就不必写close了,它会默认帮你直接关闭文件,释放内存。所以以后文件操作尽量用with方法来进行。
2、最近下载了一个15G的txt文件,想要读取其中数据看看,用上面的方法不行,后来查了一下
with open('F:_ChineseEmbedding.txt', 'r',encoding='UTF-8') as f:
for line in f:
print(line)
这样就可以一条一条的读取,用f.readlines()这种方法还是会卡死的;