2
我試圖比較兩個csv文件,然後從每個csv文件打印一行上的product_id字段。這是有問題的代碼。需要注意的是,在兩個csv文件中,這些字段的順序不同。python比較兩個csv文件與csv模塊:不遍歷每一行
import csv
import sys
f1 = sys.argv[1]
f2 = sys.argv[2]
num_matches = 0
with open(f1, 'rb') as f:
csv_readerf = csv.reader(f)
csv_readerf.next()
with open(f2, 'rb') as n:
csv_readern = csv.reader(n)
csv_readern.next()
for row in csv_readerf:
a_name = row[0].replace(" ", "").lower() #not used, can be ommitted
a_id = row[1]
a_post = row[2]
a_rev = row[3]
a_loc = row[4] #not used, can be ommitted
a_desc = row[5].replace(" ", "").lower() #remove all whitespaces for uniformity
a_ovr = row[6]
a_cmf = row[7]
a_sty = row[8]
a_siz = row[9]
a_arc = row[10]
a_wid = row[11]
a_url = row[12]
for rowP in csv_readern:
p_name = rowP[10].replace(" ", "").lower()
p_id = rowP[6]
temp = rowP[11].split(" ")[0:3] #disregard time stamp
p_post = (" ").join(temp)
p_rev = rowP[7]
if p_rev is "":
p_rev = "Anonymous"
p_desc = rowP[1].replace(" ", "").replace("\n", "").replace("\r\n", "").lower()
p_ovr = rowP[4]
p_cmf = rowP[3]
p_sty = rowP[0]
p_siz = rowP[8]
p_arc = rowP[9]
if p_arc:
p_arc = p_arc[0 : p_arc.index(" ")] #for arch we only want the first word
p_wid = rowP[5]
p_url = rowP[2]
print a_id, p_id
我遇到的問題是,在輸出中,這是我傾入.txt文件,並非所有的product_id從F1的打印。我知道這一點,因爲f1是我創建的測試文件,我有意將多個不同ID的產品放在那裏。
另一件需要注意的事情是,我嘗試在單獨的腳本中循環每個csv,並且每個csv都正常工作,按預期打印每個product_id。爲什麼當我嵌入for循環時,迭代第一個文件似乎被縮短了?可能是什麼問題呢?我製作的測試文件很小,因此它們應該能夠很好地適應內存。
你爲什麼把第一內部的第二'for'循環?這可能是你的問題的根源,因爲在這個循環運行一次之後,它會讀到文件的末尾,所以在後續運行時,內部循環將不會運行。 – BrenBarn
將較小的文件讀入字典,然後在讀取較大的文件時循環。 – tripleee
好的,我會試試看。謝謝。但我真的不明白@BrenBarn的評論。它不只是讀取內部文件的文件結尾,而是讀取外部文件的結尾?那麼它不應該繼續? –