Python 删除指定行之前的所有行
如何实现删除文本文档中的行直到某一行? 我使用以下代码查找行号:Python 删除指定行之前的所有行,python,python-3.x,Python,Python 3.x,如何实现删除文本文档中的行直到某一行? 我使用以下代码查找行号: #!/usr/bin/env python lookup = '00:00:00' filename = "test.txt" with open(filename) as text_file: for num, line in enumerate(text_file, 1): if lookup in line: print(num) print(num)向我
#!/usr/bin/env python
lookup = '00:00:00'
filename = "test.txt"
with open(filename) as text_file:
for num, line in enumerate(text_file, 1):
if lookup in line:
print(num)
print(num)
向我输出字符串的值,例如66。
如何删除66行之前的所有行,即按单词删除找到的行?这很简单
filename = "test.txt"
lookup = '00:00:00'
with open(filename,'r') as text_file:
lines = text_file.readlines()
res=[]
for i in range(0,len(lines),1):
if lookup in lines[i]:
res=lines[i:]
break
with open(filename,'w') as text_file:
text_file.writelines(res)
建议对您的案例稍作修改:
- 读取文件的所有行
- 迭代行列表,直到到达关键字
- 写下所有剩余的行
打开(“yourfile.txt”、“r”)作为f:
lines=iter(f.readlines())
打开(“yourfile.txt”、“w”)作为f:
对于行中的行:
如果在行中查找:
f、 写(行)
打破
对于行中的行:
f、 写(行)
您知道要删除哪些行吗
#!/usr/bin/env python
lookup = '00:00:00'
filename = "test.txt"
with open(filename) as text_file, open('okfile.txt', 'w') as ok:
lines = text_file.readlines()
ok.writelines(lines[4:])
这将删除前4行,并将它们存储在不同的文档中,以防您想要保留原始文档
请记住在处理完文件后关闭它们:)提供三种备选解决方案所有以相同的第一部分开始-阅读:
filename=“test.txt”
查找='00:00:00'
以文本文件形式打开(文件名):
lines=text_file.readlines()
第二部分的变化如下:
False
(即当谓词为True
)为止。从这一点开始,在不重新检查谓词的情况下生成所有剩余项:
导入itertools
打开(文件名为“w”)作为文本文件:
text_file.writelines(itertools.dropwhile(lambda行:查找不在行,行))
请注意,它表示不在
中。因此,找到查找
之前的所有行都将被丢弃
奖励:如果您想做相反的事情-写行,直到找到查找
,然后停止,用替换itertools.dropwhile
found
)确定何时开始写入文件:
打开(文件名为“w”)作为文本文件的:
发现=错误
对于行中的行:
如果未找到并在第行中查找:#第二个表达式“found”为True时未检查
found=True#对于所有剩余迭代,该值保持为True
如果发现:
text_file.write(行)
idx
)从该点开始写入行;不需要其他中间变量:
对于idx,枚举中的行(行):
如果在行中查找:
打破
打开(文件名为“w”)作为文本文件:
text_file.writelines(第[idx:]行)
这回答了你的问题吗?或者,如果你认为这个问题在这个网站的其他地方有答案,可以看看@javadr,而不是将链接作为评论发布……为什么要将行保存到列表
res
?为什么不直接将它们写入文件?那也可以。我尝试了你的版本,之后文件为空。我只是忘记添加查找='00:00:00'。现在应该可以工作了。谢谢,你需要的是工作。这样的时刻,在你的解决方案中,找到的字符串被删除了,如何避免呢?“谢谢,”亚历克斯丽贝尔说fixed@Tomerikoo需要在第一个循环中的f.write(line)
之后添加一个break
。否则,第一个循环只写入包含lookup
项的行,并耗尽迭代器。使用中断
,一旦找到并写入第一行,它就进入第二个循环,第二个循环写入所有剩余的行。@aneroid!抢手货这是一个社区维基,所以你可以随意修复它:)不管怎样,你做了吗