下面是一个示例文本文件
the bird flew
the dog barked
the cat meowed
这是我要删除的短语的行号
phrase = 'the dog barked'
with open(filename) as myFile:
for num, line in enumerate(myFile, 1):
if phrase in line:
print 'found at line:', num
我可以添加什么来删除行号(num) 我试过了
lines = myFile.readlines()
del line[num]
但这不管用我该怎么做?
一个名为gnibbler的用户在另一个线程上发布了类似的内容。
在适当的位置修改文件,违规行将替换为空格,这样文件的其余部分就不需要在磁盘上乱放。如果修复不长于要替换的行,也可以将行“修复”到位
如果可以更改另一个程序以输出文件偏移量而不是行号,则可以直接将偏移量分配给p,而不必使用for循环
我找到了另一个有效的解决方案,它不需要对文件对象中的行进行令人讨厌的、不那么优雅的计数:
对想要的人的详细解释:
(1)创建包含要删除的行号整数值的变量。假设我要删除第3行:
(2)打开文本文件并将其放入文件对象中。现在只需要阅读模式。然后,将其内容放入列表中:
(3)现在每一行都应该是“list”中的索引元素。可以通过删除表示要删除的行的元素来继续:
在这一点上,如果您得到了应该从用户输入中删除的行号,请确保首先将其转换为整数,因为它很可能是字符串格式(如果您使用“input()”)。
这是del_line-1,因为列表的元素索引从0开始。但是,我假设您(或用户)开始在第1行的“1”处计数,在这种情况下,您需要扣除1以获取列表中的正确元素。
(4)再次打开列表文件,这次以“写入模式”,重写完整的文件。之后,遍历更新的列表,将“list”的每个元素重写到文件中。您不必担心新行,因为在将原始文件的内容放入列表时(步骤2),转义符也将复制到列表元素中:
当我想让用户决定删除某个文本文件中的哪一行时,这就完成了我的工作。 我认为马蒂金·皮特斯的回答也有相似之处,不过他的解释对我来说是微不足道的。
您可以使用
fileinput
模块更新文件-注意,这将删除所有包含短语的行:相关问题 更多 >
编程相关推荐