簡體   English   中英

使用Python將搜索列表與csv文件的每一行進行比較

[英]Compare a searchlist to each row of csv file using Python

我有一個搜索項目列表:

search = ("EPP3424", "EPP5423", "EPP4567", Continues... )

我想檢查csv文件的每一行,其中每一行看起來像這樣:

("1206502", "EPP5423", "97334343")
next row...

如果搜索列表中的任何項目出現在csv的行中,請將整行添加到新列表中。

問題是我只能讓它匹配一個結果,而似乎無法正確地遍歷所有項目。

csvFile = open(fRoot + "\\SearchEPP.csv", 'r')
try:
    csvReader = csv.reader(csvFile)
    for row in csvReader:
        if all(s in row for s in search):
            print "Match"
            allEPP.append(row)
        else:
            print "no match"
finally:
    csvFile.close()

Python 2.6,Windows 7

更新:

這是我根據您的回復嘗試執行的操作,但仍然只返回一條記錄。

f = open(fRoot + "\\EPP.txt", "r")

search = list()
for row in f:
    search.append(row)

search = set(search)   

#search = ("EPP2383", "EPP2384")

allEPP = list()

csvFile = open(fRoot + "\\SearchEPP.csv", 'r')
try:
    csvReader = csv.reader(csvFile)
    for row in csvReader:
        if any(r in search for r in row):
            print "Match"
            allEPP.append(row)
        else:
            print "."
finally:
    csvFile.close()
if all(s in row for s in search):

應該可能是:

if any(s in row for s in search):

請注意,執行此操作的更好方法是將search一次轉換為集合:

search = set(search)
...

然后檢查set (而不是tuple )。 set成員資格測試通常為O(1),而元組的成員資格測試為O(n)。

if any(r in search for r in row):

甚至:

if search.intersection(row):
   ...

盡管any解決方案都可能更快(取決於row大小以及通過交集創建新集合的開銷與生成器表達式的開銷之間的關系)。


正如@RocketDonkey所建議的那樣,您的“搜索”列表中可能會有換行符,這仍然在更新的代碼中引起問題。 這是一個解決方法:

with open(fRoot + "\\EPP.txt", "r") as f:
    search = set(line.rstrip('\n') for line in f)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM