用Python将字典写入csv的最有效方法是什么?
我正在编写代码,通过从网站上抓取html表来生成csv文件。该函数将查看表的每一行,并将数据列存储在字典中,如下所示用Python将字典写入csv的最有效方法是什么?,python,csv,python-3.x,dictionary,file-io,Python,Csv,Python 3.x,Dictionary,File Io,我正在编写代码,通过从网站上抓取html表来生成csv文件。该函数将查看表的每一行,并将数据列存储在字典中,如下所示 def write_data(): table_date = get_data() # call function to get data from html table into a dict // write table_date to csv def get_data(): data = {} for row in tr:
def write_data():
table_date = get_data() # call function to get data from html table into a dict
// write table_date to csv
def get_data():
data = {}
for row in tr:
data['name'] = 'John'
data['id'] = 12
return data
这是一个简化版本,但本质上我需要一种方法来获取每个表行的dictionary对象数据
,并将其写入csv,其中键将是标题行。做这件事的有效方法是什么?使用;只需为每行发送字典:
writer = csv.DictWriter(open_writable_file, fieldnames=['id', 'name'])
writer.writeheader() # write a row the fieldnames
对于您制作的每一本词典:
writer.writerow(table_data)
请确保使用newline=''
选项打开可写文件,以让csv
模块控制行尾:
with open(filename, 'w', newline='') as open_writable_file):
由于某种原因,
csv.DictWriter
文档示例中省略了此建议;但对象是的一个子类,这里的建议同样适用。谢谢@martinj这有帮助。尽管我有几个问题?1.有没有一种方法可以从字典键本身获取文件名,而不必显式地编写它?2.此外,return语句将只返回第一行并停止,但我需要将get_data()中的每一行返回给write_data()函数。有没有办法做到这一点?您可以显式地编写它们来定义它们的顺序。字典没有明确的顺序。您可以只使用第一个字典中的table_data.keys()
,但随后会得到不一致的顺序(这取决于Python使用的随机种子以避免哈希冲突攻击);您可以使用生成器函数从函数中生成更多的数据行,或者只返回数据行列表,或者让函数直接写入CSV文件。