我正在尝试比较两个 csv 文件,然后在每个 csv 文件的一行上打印 product_id 字段。这是有问题的代码。需要注意的是,在两个 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 的产品。
另一件需要注意的事情是,我尝试在单独的脚本中循环遍历每个 csv,并且每个都正常工作,按预期打印出每个 product_id。为什么当我嵌入 for 循环时,迭代第一个文件似乎被缩短了?可能是什么问题呢?我制作的测试文件很小,所以它们应该能够完全适合内存。