使用Python在多个文本文件中搜索字符串列表的匹配项

使用Python在多个文本文件中搜索字符串列表的匹配项,python,Python,因此,我从零开始编写一个我在其他任何地方都没有看到过的程序。我将准确描述我希望它做什么: 我有一个字符串列表,如下所示: 12482-2958 02274+2482 23381-3857 .......... 我想获取这些字符串中的每一个,并在几十个文件(全部命名为wds000.dat、wds005.dat、wds010.dat等)中搜索匹配项。如果其中一个找到匹配项,我想将该字符串写入一个新文件,因此最后我有一个具有匹配项的字符串列表 如果我需要更清楚一些事情,请告诉我。任何关于从何处开始的

因此,我从零开始编写一个我在其他任何地方都没有看到过的程序。我将准确描述我希望它做什么:

我有一个字符串列表,如下所示:

12482-2958
02274+2482
23381-3857
..........
我想获取这些字符串中的每一个,并在几十个文件(全部命名为wds000.dat、wds005.dat、wds010.dat等)中搜索匹配项。如果其中一个找到匹配项,我想将该字符串写入一个新文件,因此最后我有一个具有匹配项的字符串列表


如果我需要更清楚一些事情,请告诉我。任何关于从何处开始的帮助都将不胜感激。谢谢各位

定义一个获取路径和字符串并检查匹配的函数。
您可以使用:open()、find()、close() 然后只需在for循环中创建所有路径,对于每个路径,使用函数检查所有字符串,并在需要时打印到文件


没怎么解释。。。需要更多解释吗?

不太像蟒蛇。。。可能有些事情需要理顺,但基本上逻辑如下:

from glob import glob
strings = ['12482-2958',...] # your strings
output = []
for file in glob('ws*.dat'):
    with open(file, 'rb+') as f:
        for line in f.readlines():
            for subs in strings:
                if subs in line:
                    output.append(line)
print(output)

像这样的东西应该有用

import os

#### your array ####
myarray = {"12482-2958", "02274+2482", "23381-3857"}

path = os.path.expanduser("path/to/myfile")
newpath = os.path.expanduser("path/to/myResultsFile")
filename = 'matches.data'
newf = open(os.path.join(newpath, filename), "w+")

###### Loops through every element in the above array ####
for element in myarray:
    elementstring=''.join(element)

    #### opens the path where all of your .dat files are ####
    files = os.listdir(path)
    for f in files:
        if f.strip().endswith(".dat"):
            openfile = open(os.path.join(path, f), 'rb')
            #### loops through every line in the file comparing the strings ####
            for line in openfile:
                if elementstring in line:
                        newf.write(line)
           openfile.close()
newf.close()

Python中实现这一点的标准/最明显的方法是从文件名列表(可能由
glob.glob()
创建)开始,然后遍历该列表。对于每个文件名,打开文件,然后遍历其中的文本行。。。。但是,除非您开始尝试,并且能够确定具体的进展障碍,否则StackOverflow不是获得正确帮助的地方。如果在unix上,使用sed、grep或awk会更好、更简单、更快。为什么使用Python?在普通*nix shell中使用
find
grep-f
>
组合可以轻松完成这项工作,请尽快尝试。对于“myarray”部分,如果我在一个文件中列出了所有字符串,我是否应该使用numpy来导入数组?是的,这肯定是一种方法。如果要尝试直接从文件本身读取,请签出。我并没有靠近我的计算机去测试它,但那个答案看起来很有希望。我用numpy导入了我的数组,这个解决方案非常有效!非常感谢,你帮了大忙。没问题,很高兴我能帮上忙!所以我在上面加了两行,完全打破了它。在第一个块中,我定义了
newf=open(“matches.data”,“w”)
,然后直接在
print line
之后,我有
newf.write(line)
,这样我就可以将所有结果记录在一个文件中,稍后再查看。但是,现在程序在第一个字符串上反复循环,并且不会移动到下一个字符串。如果我删除这两行,它运行良好!哈尔普=(