繁体   English   中英

在Python中从csv模块搜索字符串时遇到问题

[英]Having problems searching with strings from csv module in Python

我有一个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 'L 99' in line:并且if partList[i] in line:我得到结果:

>>> ['5.txt']

因此,使用Martijn的输入,我发现问题在于如何遍历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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM