Hi Stack Overflow用户,
我对Python很陌生,并且已经从所有问题和答案中取得了很多进展。非常感谢大家的贡献!
过去几天我一直试图解决一个问题,但尽管进行了大量的研究,我仍然无法弄明白。
假设我有两个包含以下数据的CSV文件:
' File1.csv':
sku; title
01001; Product1
01002; Product2
01003; Product3
和' File2.csv':
sku; color
01001; blue
01003; green
01005; red
我希望我的python程序要做的是为File1.csv中的所有SKU添加缺少的数据(颜色)。输出应如下:
' output1.csv':
sku; title; color
01001; Product1; blue
01002; Product2;
01003; Product3; green
我写的Python代码:
import csv
f1 = open('file1.csv', 'r', newline='', encoding='UTF-8')
f2 = open('file2.csv', 'r', newline='', encoding='UTF-8')
f1_reader = csv.reader(f1, delimiter=';')
f2_reader = csv.reader(f2, delimiter=';')
i = 0
j = 0
for row in f1_reader:
for line in f2_reader:
if str(row[0]) == str(line[0]):
print(str(i), str(j), 'Success', str(row[0]), str(line[0]), str(line[1]))
# Use values to copy the color value to file1.csv
j = j + 1
i = i + 1
不幸的是,这段代码不起作用。我得到的唯一输出如下:
1 1 Success sku sku color
我想我的逻辑可能有点偏离这里,但我期待更多的成功'。再一次,我只是Python的初学者,所以我很想知道我的代码有什么问题!
有什么建议吗?
更新
我删除了换行符''和if语句,看看问题可能是什么:
for row in f1_reader:
for line in f2_reader:
print('Success', str(row[0]), str(line[0]), str(line[1]))
事实证明我得到以下输出:
Success sku sku color
Success sku 01001 blue
Success sku 01003 green
Success sku 01005 red
IndexError: list index out of range
f1_reader不会遍历其所有行,而f2_reader则会迭代。有没有办法让我的代码迭代我的文件,检查相同的行[0]和行[0]'?
解
以下代码适用于我:
import csv
f1 = open('file1.csv', 'r')
f1_reader = csv.reader(f1, delimiter=';')
for row in f1_reader:
with open('file2.csv', 'r') as f2:
f2_reader = csv.reader(f2, delimiter=';')
for line in f2_reader:
try:
if str(row[0]) == str(line[0]):
print('Success', str(row[0]), str(line[0]), str(line[1]))
except IndexError:
continue
返回:
Success sku sku color
Success 01001 01001 blue
Success 01003 01003 green
Success 01005 01005 red
答案 0 :(得分:2)
你遇到的问题是,一旦你读完f2一次,你就到了文件的末尾。因此它只会将f2与第一个循环进行比较。 当您再次启动循环时,需要一种从文件开头读取f2的方法。我已经编辑了下面的代码,因此除了它之外,它是循环的:
import csv
f1 = open('file1.csv', 'r')
f1_reader = csv.reader(f1, delimiter=';')
i = 0
j = 0
for row in f1_reader:
f2 = open('file2.csv', 'r')
f2_reader = csv.reader(f2, delimiter=';')
for line in f2_reader:
if row[0] == line[0]:
print(str(i), str(j), 'Success', str(row[0]), str(line[0]), str(line[1]))
# Use values to copy the color value to file1.csv
j = j + 1
f2.close
i = i + 1
返回
0 0 Success sku sku color
1 5 Success 01001 01001 blue
3 14 Success 01003 01003 green