我试图在多个文件中搜索字符串并将其打印在另一个文件中

时间:2015-04-09 16:33:07

标签: python regex file

我在源文件夹中有多个.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()

1 个答案:

答案 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可能是一个有用的资源。