import gzip
files = glob.glob('myfiles/all*/input.gz')
for file in files:
with gzip.open(file, 'rt') as f, open('file1.txt', 'w') as o:
for line in f:
if 'Alas!' in line: # Changed this
print(line, file=o)
您还需要将if 'Alas!'更改为if 'Alas!' in line。前者的计算结果总是True,因此每一行都将添加到另一个文件中。后者仅当在行中找到Alas!时才会向另一个文件添加一行
import gzip
import glob
with open('file1.txt', 'w') as o:
for file in glob.glob('myfiles/all*/input.gz'):
with gzip.open(file, 'rt') as f:
for line in f:
if 'Alas!' in line:
print(line, file=o, end='')
.gz
文件已压缩,因此无法通过直接打开它来搜索内容。您需要在搜索之前解压缩它。Python提供了gzip.open
来打开和解压缩gzip压缩文件您还需要将
if 'Alas!'
更改为if 'Alas!' in line
。前者的计算结果总是True
,因此每一行都将添加到另一个文件中。后者仅当在行中找到Alas!
时才会向另一个文件添加一行值得一提的是,
zgrep
以类似的方式工作。它解压文件,然后将其传输到grep
(请参见https://stackoverflow.com/a/45175234/5666087)声明
仅检查字符串值
'Alas!'
是否为“truthy”(根据定义,它是);要检查变量line
是否包含此子字符串另一个问题是,您多次打开输出文件,覆盖了以前输入文件的任何结果。您只想在开始时打开它一次(或打开以进行追加;但重复打开和关闭同一文件是不必要的,而且效率低下)
更好的设计可能是简单地打印到标准输出,并允许用户将输出重定向到文件(如果他们愿意)。(另外,可能接受输入文件作为命令行参数,而不是硬编码复杂的相对路径。)
第三个问题是,输入行已经包含一个换行符,但是
print()
将添加另一个换行符。在打印前去掉换行符,或者告诉print
不要提供另一个换行符(或者切换到不添加换行符的write
)演示:https://ideone.com/rTXBSS
相关问题 更多 >
编程相关推荐