在多个文本文件中搜索两个字符串?

时间:2015-01-16 10:24:15

标签: python python-2.7

我有一个包含许多文本文件的文件夹(EPA10.txt,EPA55.txt,EPA120.txt ...,EPA150.txt)。我有两个要在每个文件中搜索的字符串,搜索结果写在文本文件result.txt中。到目前为止,我有一个文件工作。这是工作代码:

if 'LZY_201_335_R10A01' and 'LZY_201_186_R5U01' in open('C:\\Temp\\lamip\\EPA150.txt').read():
    with open("C:\\Temp\\lamip\\result.txt", "w") as f:
        f.write('Current MW in node is EPA150')
else:
    with open("C:\\Temp\\lamip\\result.txt", "w") as f:
        f.write('NOT EPA150')

现在我希望对文件夹中的所有文本文件重复此操作。请帮忙。

3 个答案:

答案 0 :(得分:3)

鉴于您有一些从EPA1.txtEPA150.txt命名的文件,但您不知道所有名称,您可以将它们完全放在一个文件夹中,然后读取所有文件该文件夹使用os.listdir()方法获取文件名列表。您可以使用listdir("C:/Temp/lamip")读取文件名。

此外,您的if声明错误,您应该这样做:

text = file.read()
if "string1" in text and "string2" in text

以下是代码:

from os import listdir

with open("C:/Temp/lamip/result.txt", "w") as f:
    for filename in listdir("C:/Temp/lamip"):
        with open('C:/Temp/lamip/' + filename) as currentFile:
            text = currentFile.read()
            if ('LZY_201_335_R10A01' in text) and ('LZY_201_186_R5U01' in text):
                f.write('Current MW in node is ' + filename[:-4] + '\n')
            else:
                f.write('NOT ' + filename[:-4] + '\n')

PS:您可以在路径中使用/代替\\,Python会自动为您转换它们。

答案 1 :(得分:0)

您可以通过创建一个for循环来执行此操作,该循环遍历当前工作目录中的所有.txt文件。

import os

with open("result.txt", "w") as resultfile:
    for result in [txt for txt in os.listdir(os.getcwd()) if txt.endswith(".txt")]:
        if 'LZY_201_335_R10A01' and 'LZY_201_186_R5U01' in open(result).read():
             resultfile.write('Current MW in node is {1}'.format(result[:-4]))
         else:
             resultfile.write('NOT {0}'.format(result[:-4]))

答案 2 :(得分:0)

Modularise!的 Modularise!

好吧,不是必须编写不同的Python模块,而是分离手头的不同任务。

  1. 找到您要搜索的文件。
  2. 阅读文件并找到文字。
  3. 将结果写入单独的文件。
  4. 这些任务中的每一项都可以独立解决。即要列出文件,您可能需要os.listdir进行过滤。

    对于第2步,无论您要搜索1个还是1,000个文件都无关紧要。例程是一样的。您只需要迭代在步骤1中找到的每个文件。这表明步骤2可以实现为将文件名(和可能的搜索字符串)作为参数的函数,并返回True或{{1} }。

    步骤3是步骤1中每个元素与步骤2的结果的组合。

    结果:

    False