在python中使用for循环向CSV追加多行代码

a11xaf1n  于 2023-03-10  发布在  Python
关注(0)|答案(2)|浏览(204)

我已经编写了代码来创建一个多行CSV文件。为了这个目的,一列将写入默认值,其他列将有空白值供以后编辑。
代码的结果是正确创建了标题,但是所有列表值都合并到了第一行。

import csv

# Write Headers
headerlist = (['Class', 'Grade', 'Semester'])
with open('venv/User Data/Classes.csv', 'w', newline='') as file:
    dx = csv.DictWriter(file, delimiter=',',
                        fieldnames=headerlist)
    dx.writeheader()

# Define Default values
Default = [
    ['Math', 'English', 'Science', 'History']
]

# Write Default values to Class column
for name in Default:
    with open('venv/User Data/Classes.csv', 'a') as csv_file:
        a = name
        b = " "
        c = " "
        result = {"Class": a, "Grade": b, "Semester": c}
        result_object = csv.DictWriter(csv_file, fieldnames=headerlist)
        result_object.writerow(result)

应创建4行,其中class列下有值,其他两行为空值。

at0kjp5o

at0kjp5o1#

问题是你在用

result_object.writerow(result)

writerrow()函数写入一行,如果要写入多行,建议您尝试以下方法:

result_object.writerows(result.values())

不同之处在于writerows()的使用--注意结尾的S--函数将写入多行。最后,您可能需要将结果字典中的值列表转换为列表,以便writerows()函数接受它。

23c0lvtd

23c0lvtd2#

这段代码使用for循环创建变量中的值列表,然后一次性写入所有值。

import csv

# Write Headers
headerlist = (['Class', 'Grade', 'Semester'])
with open('venv/User Data/Classes.csv', 'w', newline='') as file:
    dx = csv.DictWriter(file, delimiter=',',
                        fieldnames=headerlist)
    dx.writeheader()

# Define Default values
Default = [
     'Math',
     'English',
     'Science',
     'History'
]
#Create empty list
result = []
b = " "
c = " "
# Create list of rows
for name in Default:
    compile = {'Class': name, 'Grade': b, 'Semester': c}
    result.append(compile)
    print(result)

with open('venv/User Data/Classes.csv', 'a') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=headerlist)
        writer.writerows(result)

相关问题