我在源文件夹中有多个.txt文件,我在“src”中给出了路径。我想搜索看起来像“abcd.aiq”的字符串并将它们打印在一个名为“fi”的文件中”。 我写了下面的代码,虽然它没有给出任何错误,但它不会在文件中打印任何内容。
import glob
import re
import os
src = (C:\Auto_TEST\Testing\Automation")
file_array= glob.glob(os.path.join(src,".txt"))
fi= open("aiq_hits.txt","w")
for input_file in file_array:
fo=open(input_file,"r")
line=fo.readline()
for line in fo:
line=r.strip()
x= re.findall('\S*.aiq\S*',line)
line= fo.readline()
for item in x:
fi.write("%s\n" %item)
fo.close()
fi.close()
答案 0 :(得分:1)
我想这就是你在尝试的事情:
import glob
import re
import os.path
src = 'C:/Auto_TEST/Testing/Automation'
file_array = glob.glob(os.path.join(src,'*.txt'))
with open("aiq_hits.txt","w") as out_file:
for input_filename in file_array:
with open(input_filename) as in_file:
for line in in_file:
match = re.findall(r'\S*.aiq\S*', line)
for item in match:
out_file.write("%s\n" %item)
让我快速描述我所做的改变:
直接打开文件并不总是一个好主意。如果脚本崩溃,则打开的file
对象不会再次关闭,这可能导致数据丢失。
由于PEP 343 Python有the with
statement,因此在处理文件时,人们普遍同意成为更好的解决方案。
多次调用f.readline()
会导致脚本跳过这些行,因为for line in f:
会自行读取行。
最后,在找到每个匹配项后,您已经关闭了输入文件和输出文件,因此不再需要进一步读取或写入。
修改:如果您可能需要调整正则表达式,this可能是一个有用的资源。