关于python怎么高效修改文件行的有关问题
关于python如何高效修改文件行的问题
网上一般都是全部读入内存然后写回的方法
但按照整个文件的读入读出的话,加上正则表达式的匹配(需要通过obj,group(1)动态获取匹配要替换的内容)总共需要o(3*len(file))的时间复杂度。
我想采用循环readline的方法,按行匹配,可以在只遍历一遍文件os(len(file))的情况下修改需要替换的行,
line = f.readline()
while 1:
if line:
obj=re.search(pat,line)
newline=re.sub(obj.group(1),value,line)
f.seek(loc)
f.wirite(newline)
else:break
loc=f.tell()
但问题就出现了,如果newline长度大于line则写入的时候会覆盖到line下一行的内容,这肯定不行,又苦于没有办法,求大神指教!
------解决方案--------------------
写到一个新文件中去, 不要写回原文件.
如果你的数据能一次全读到内存中, 那么你要处理的文件规模还没大到需要考虑这样的效率问题, 一次读入足够快了.如果真的需要提高效率了, 就应该使用数据库之类的专门工具了.
------解决方案--------------------
你保存的是什么格式的文件?你保存到新文件应该不会出现这个问题的。还有,不要死循环,至少给一个可以退出循环的tag
网上一般都是全部读入内存然后写回的方法
但按照整个文件的读入读出的话,加上正则表达式的匹配(需要通过obj,group(1)动态获取匹配要替换的内容)总共需要o(3*len(file))的时间复杂度。
我想采用循环readline的方法,按行匹配,可以在只遍历一遍文件os(len(file))的情况下修改需要替换的行,
line = f.readline()
while 1:
if line:
obj=re.search(pat,line)
newline=re.sub(obj.group(1),value,line)
f.seek(loc)
f.wirite(newline)
else:break
loc=f.tell()
但问题就出现了,如果newline长度大于line则写入的时候会覆盖到line下一行的内容,这肯定不行,又苦于没有办法,求大神指教!
------解决方案--------------------
写到一个新文件中去, 不要写回原文件.
如果你的数据能一次全读到内存中, 那么你要处理的文件规模还没大到需要考虑这样的效率问题, 一次读入足够快了.如果真的需要提高效率了, 就应该使用数据库之类的专门工具了.
------解决方案--------------------
你保存的是什么格式的文件?你保存到新文件应该不会出现这个问题的。还有,不要死循环,至少给一个可以退出循环的tag