Python - 写入CSV文件和循环

问题描述:

编辑批准的答案是正确的,我的所有数据都出现在文件中,但是由于它正在循环并将每条信息写入新行,所以数据是无组织,出现在一个层叠模式。在这一点上,这只是一个格式问题。任何人都遇到类似的问题?Python - 写入CSV文件和循环

我有一个for循环,我在其中定义了多个变量。我需要将这些变量中的值打印到CSV,而不必一遍又一遍地重复写入行。我知道解决这个问题的方法是在for循环之外放置“with open”语句,但是python不再识别我的变量。

我认为解决方案的另一部分是在变量内追加数据,以便您可以在for循环之外调用它,但我不确定如何为我的情况执行此操作。

实施例:

for item in my_list: 

    info = inspect.getmembers(item) 
    name = info[0] 

import csv 

with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'Item Name': name }) 
csvFile.close() 

在这个例子中,不能定义变量“name”,因为它是内for循环定义。

+0

如果您使用'with',则不需要'csvFile.close()'。另外,'name'在你的循环中总是被重新定义,你是否想把所有的'info [0]'添加到列表中?另一件事,你应该使用一个名为'list'的变量,因为它已经被python用来创建空列表。最后,'with'已经在'for'循环之外了,你得到了什么样的输出与你期望的? – jacoblaw

+0

是的,我需要将所有信息[0]写入csv。假如我打印'name'然后运行这个代码,我可以看到列表中每个项目的名称,但是当我将它写入csv时,我只能看到列表中最后一个项目的名称。 –

import csv 
with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     info = inspect.getmembers(item) 
     name = info[0] 

     writer.writerow({'Item Name': name }) 

with你的循环之前,这样就可以从内部值写入到文件的for循环:

import csv 
with open('sample.csv', 'w') as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     # get the data you want from item 
     info = inspect.getmembers(item) 
     name = info[0] 

     # write the data to the file 
     writer.writerow({'Item Name': name }) 

注意(因为我没有足够的声誉尚未就此发表评论) :在Rohan的答案中发现的csvFile.close()不是必需的,因为这是由with声明处理的。另外,根据PEP8,他应该使用2个空格而不是4个缩进。