我不熟悉脚本并尝试读取 .gz 文件并复制包含“Alas!”的行。在其文件中。myfiles/all*/input.gz
. 在提到的路径中,它应该搜索所有以 (all) 开头的目录。对于 input.gz 文件。在 input.gz 文件中,它应该搜索字符串“Alas!” 并打印文本文件中的行。我确定如何使用zgrep
command执行此 linux zgrep 'Alas!' myfiles/all*/input.gz > file1.txt
。我在尝试为此编写脚本时丢失了某个地方。
该声明
if 'Alas!':
仅检查字符串值'Alas!'
是否“真实”(根据定义,确实如此);您想检查变量是否line
包含此子字符串;
if 'Alas!' in line:
另一个问题是您多次打开输出文件,覆盖了先前输入文件的任何结果。您只想在开始时打开它一次(或为追加而打开;但重复打开和关闭同一个文件是不必要且低效的)。
更好的设计可能是简单地打印到标准输出,并让用户根据需要将输出重定向到文件。(另外,可能接受输入文件作为命令行参数,而不是硬编码一个非常复杂的相对路径。)
第三个问题是输入行已经包含一个换行符,但print()
会添加另一个。要么在打印前去掉换行符,要么告诉print
不要提供另一个(或切换到write
不添加一个)。
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='')
演示:https : //ideone.com/rTXBSS
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句