在Python中使用csv模块中的字符串进行搜索时遇到问题

时间:2014-07-15 11:42:00

标签: python python-2.7 csv

我有一个csv文件partList.csv,其中包含我想用来搜索更大的txt文件组的字符串。出于某种原因,当我使用直接字符串' L 99 '我得到了一个结果。当我从csv加载字符串 L 99 时,我得不到结果。

partList.csv仅包含第一列中包含部件号的单元格,其中一个是 L-99 txt_files_sample\5.txt是一个文本文档,在某些时候包含字符串 L 99

我的代码:

def GetPartList():
    partList = []
    f = open('partList.csv', 'rb')
    try:
        reader = csv.reader(f)
        for row in reader:
            part = row[0].replace('-',' ').strip()
            partList.append(part)
    finally:
        f.close()
    return partList

def FindFileNames(partList):
    i = 0
    files = []
    for root, dirs, filenames in os.walk('txt_files_sample'):
        for f in filenames:
            document = open(os.path.join(root, f), 'rb')
            for line in document:
                if partList[i] in line:
                #if 'L 99' in line:
                    files.append(f)
                    break
            i = i + 1
    return files

print FindFileNames(GetPartList())

代码如上所示产生:

>>> []

如果我取消注释if 'L 99' in line:并注释掉if partList[i] in line:,我会得到结果:

>>> ['5.txt']

1 个答案:

答案 0 :(得分:0)

因此,使用Martijn's输入,我发现问题是我如何循环partList。重写FindFileNames()工作:

def FindFileList(partList):
    i = 0
    files = []
    for root, dirs, filenames in os.walk('txt_files'):
        for f in filenames:
            a = 0
            document = open(os.path.join(root, f), 'rb')
            for line in document:
                if a is 1:
                    break
                for partNo in partList:
                    if partNo in line:
                        files.append(f)
                        a = 1
            document.close()
    return files

使用更新的代码,我得到的结果是一个准确的文件名列表。