是否可以修改文件中的行?

是否有可能一行一行地parsing一个文件,并通过这些行就地编辑一行?

是否有可能一行一行地parsing一个文件,并通过这些行就地编辑一行?

它可以使用stdlib的文件fileinput模块的备份文件进行模拟。

以下是一个示例脚本,用于从命令行或stdin给出的文件中删除不满足some_condition的行:

 #!/usr/bin/env python # grep_some_condition.py import fileinput for line in fileinput.input(inplace=True, backup='.bak'): if some_condition(line): print line, # this goes to the current file 

例:

 $ python grep_some_condition.py first_file.txt second_file.txt 

完成后, first_file.txtsecond_file.txt文件将只包含满足some_condition()谓词的行。

不可以。您不能安全地写入您正在阅读的文件,因为您对文件所做的任何更改都可能会覆盖尚未阅读的内容。 要安全地做到这一点,你必须将文件读入缓冲区,根据需要更新任何行,然后重新写入文件。

如果你将字节replace成文件中的内容(即,如果你正在replace的文本长度与你replace的新string的长度相同),那么你可以避开它,但它是一个黄蜂所以我会省下麻烦,只读完整文件,replace内存中的内容(或通过临时文件),然后再写出来。

如果您只打算执行不改变被修改文件部分长度的本地化修改(例如,将所有字符更改为小写),则实际上可以dynamic覆盖文件的旧内容。

为此,您可以使用file对象的seek()方法使用随机文件访问。

或者,您可以使用mmap对象将整个文件视为可变string。 请记住,根据您的操作系统及其configuration, mmap对象可能会在32位CPU上在2-4 GB范围内强制实现最大文件大小限制。

你必须以字符的大小来备份。 假设你使用了readline ,那么你可以得到该行的长度并使用以下命令备份:

 file.seek(offset[, whence]) 

从哪里设置SEEK_CUR ,设置偏移量为SEEK_CUR

请参阅Python文档或查看手册页以seek