2014-07-15 51 views
0

我有一個csv文件partList.csv,它帶有我想要用來搜索大量txt文件的字符串。由於某些原因,當我使用直接字符串'L 99'時,我得到了一個結果。當我從csv加載字符串L 99時,我得不到任何結果。在使用Python中的csv模塊搜索字符串時遇到問題

partList.csv僅包含第一列中帶有部件號的單元,其中一個是L-99txt_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'] 
+2

爲什麼你用'i'來索引'partList'?您正在測試'partList'中的每個元素對*不同文件*。 'partList'包含什麼? –

+0

是的,我一直在看我自己。我要編輯一下,讓我知道你的想法。 – kevinaskevin

回答

0

因此使用Martijn's輸入,我發現問題是我如何通過partList循環。 Rewritting 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 

有了更新的代碼我得到的結果,這是文件名的準確名單。

+1

您沒有關閉這些文件,也許可以將搜索放入一個自己的函數中,只要在一行中找到任何零件編號,就會立即返回,從而提高效率。或者甚至是正確的,因爲現在具有多於一個零件號的文件將被多次添加到文件列表中。 – BlackJack

相關問題