2 つの csv ファイルを比較して、各 csv ファイルから 1 行に product_id フィールドを出力しようとしています。これが問題のコードです。2 つの 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 ファイルにダンプした出力に、f1 のすべての product_id が出力されないことです。f1 は私が作成したテスト ファイルであり、意図的に異なる ID のいくつかの製品をそこに配置したため、これは確かです。
注意すべきもう1つのことは、個別のスクリプトで各csvをループしようとしたところ、それぞれが正しく機能し、期待どおりに各product_idを出力したことです。for ループを埋め込むと、最初のファイルの反復処理が短くなったように見えるのはなぜですか? 何が問題なのですか?私が作成したテスト ファイルは小さいので、メモリに完全に収まるはずです。