使用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)
,这样我就可以将所有结果记录在一个文件中,稍后再查看。但是,现在程序在第一个字符串上反复循环,并且不会移动到下一个字符串。如果我删除这两行,它运行良好!哈尔普=(