使用迭代读取和写入csv

2024-10-03 02:43:48 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我的代码有一些问题。我试图读取一个csv,附加一些值,然后写入它自己的csv文件。我有一个列表,我试图将每个列表中的所有内容进行比较。但是我遇到了一些问题。当我读取csv以获取值时 不是按顺序在列表上迭代,因为它从两个列表中获取一些项。它也通过迭代第二个列表开始。例如:group = [[Walmart, Target],[Kohls, Macys]],将打印:Macys, Walmart, Kohls, Target。然后当我写入csv时,它会将所有项目放在同一个单元格中

我的代码:

group = [[Walmart, Target],[Kohls, Macys]]
name = []
q_one = []
q_two = []
q_three = []
q_four = []
count = 0

with open('practice.csv') as fh:
    spreadsheet = csv.DictReader(fh, delimiter=',')

    for row in spreadsheet:
        for list in group:
            for company in list:
                if str(company) == row['Name']:
                   q_one.append(row['Q1'])
                   q_two.append(row['Q2'])
                   q_three.append(row['Q3'])
                   q_four.append(row['Q4'])
                   name.append(row['Name'])

with open('companys.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    for y in name:
        if count = (count % 2) == 0:
           csvwriter.writerow(["Name", "Q1", "Q2", "Q3", "Q4"])
           csvwriter.writerow([name, q_one, q_two, q_three, q_four])
           count = count + 1
        if count = (count % 2) == 1:
           csvwriter.writerow([name, q_one, q_two, q_three, q_four])
           count = count + 1

期望输出:

Name    Q1  Q2  Q3  Q4
Walmart ..  ..  ..  ..
Target  ..  ..  ..  ..

Name    Q1  Q2  Q3  Q4
Kohls   ..  ..  ..  ..
Macys   ..  ..  ..  ..

Tags: csvnametarget列表countonerowthree
2条回答

另一个解决方案可以使用count作为索引,正如我向您介绍的:

with open('companys.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    for y in name:
        if (count % 2) == 0:
           csvwriter.writerow(["Name", "Q1", "Q2", "Q3", "Q4"])
           csvwriter.writerow([name[count], q_one[count], q_two[count], q_three[count], q_four[count]])
           count = count + 1
        elif (count % 2) == 1:
           csvwriter.writerow([name[count], q_one[count], q_two[count], q_three[count], q_four[count]])
           count = count + 1

这是因为您正在为每个单元格编写整个列表q_one,等等。您必须将它们与名称一起迭代。最好的方法是使用zip。例如:

with open('companys.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    for y, q1, q2, q3, q4 in zip(name, q_one, q_two, q_three, q_four):
        if count = (count % 2) == 0:
           csvwriter.writerow(["Name", "Q1", "Q2", "Q3", "Q4"])
           csvwriter.writerow([name, q1, q2, q3, q4 ])
           count = count + 1
        if count = (count % 2) == 1:
           csvwriter.writerow([name, q1, q2, q3, q4 ])
           count = count + 1

相关问题 更多 >