迭代CSV文件

2024-10-01 11:34:29 发布

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

我试图从我的csv文件中读取我的,迭代它以找到某些字符串,然后添加另一行和列,如果找到了所述字符串,则添加新字符串。 例如,我试图遍历该文件以查找字符串面粉(但数据类型表示其对象,我假定为字符串值),如果在该列中找到面粉,我可以附加一个名为Allergon1的新行,并将其命名为麸质。计划是对更多的过敏原做同样的事情。如过敏原2将鸡蛋等,下面是我到目前为止

CSV看起来像这样。它太大了,我无法在这里输入,但这里有一个指向原始csv文件的链接enter link description here

本节允许我添加一个名为Allergon1的新行,并在列中插入“面粉”。当使用时,它自身工作良好。testing.csv只是我在本地制作的一个文件,因此我可以测试结果

input_file = pd.read_csv('recipes.csv')
input_file['Allergen2'] = 'flour'
input_file.to_csv('testing.csv', index=False) 

这就是我到目前为止所做的,只是一个基本的迭代。我尝试了pandas和python的不同变体来读取csv文件

input_file = csv.DictReader(open('recipes.csv'))
for row in input_file:
if ('flour') in row.values():
    input_file['Allergen100'] = 'Gluten'
    input_file.to_csv('testing.csv', index = False)

我的问题是迭代工作得很好,它会打印csv中的每一行。我只是不知道如何在if语句中使用上面的addnewrow和column段。我得到的错误是

TypeError: 'DictReader' object does not support item assignment

有人知道这意味着什么,我如何解决它吗


Tags: 文件csvto字符串falseinputindextesting
1条回答
网友
1楼 · 发布于 2024-10-01 11:34:29

csv模块是一个非常基本的模块,不包括熊猫的任何奇特方面。特别是,csv.DictReader实际上不向内存写入任何内容,因此没有要更新的数组(与pandas不同);相反,csv.DictReader只返回csv文件的每一行,一次返回一行。如果不将这些行保存到新变量,则它们将被丢弃。在需要处理100 GB csv文件但只有10 GB RAM的情况下,csv模块将非常有用。csv模块允许您逐行读取csv文件,并根据所读内容执行操作。另一方面,Pandas会尝试将整个csv文件打开到内存中,这允许您在重写新的csv文件之前动态更新内存

如果将csv.DictReader包装在一个列表()中,您将遍历所有行并将整个文件读入内存

#Read
f = open('recipes.csv')
input_file = list(csv.DictReader(f))
for row in input_file:
    if 'flour' in row.values():
        row['Allergen100'] = 'Gluten'
f.close()

#Write
f = open('testing.csv','w')
output_file = csv.DictWriter(f,input_file[0].keys())
output_file.writeheader()
output_file.writerows(input_file)
f.close()

相关问题 更多 >