繁体   English   中英

将值从字典写入CSV行时出现问题

[英]Issue in writing values from dictionary to csv row

我在将已解析的内容从网络搜寻器写入CSV文件时遇到问题。

csvfile = open('names.csv', 'a+')
fieldnames = ['news_url','news_title','news_author','date_pub','date_up','news_desc']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)    
writer.writeheader()
data_list = {
    'news_url': news_url,
    'news_title': news_title,
    'news_author': news_author,
    'date_pub': date_pub,
    'date_up': date_up,
    'news_desc': news_desc,
}
if '' not in data_list.values():
    writer.writerow(data_list)

我得到类似以下文件的格式

https://s3-us-west-2.amazonaws.com/my-contents/names.csv

您尚未包括数据的外观。 我假设您有一个数据值列表。

根据您拥有的代码, data_list仅是一行。 因此,应使用一次对writerow()调用来编写它,而无需遍历您创建的data_list字典:

import csv

fieldnames = ['news_url', 'news_title', 'news_author', 'date_pub', 'date_up', 'news_desc']

with open('names.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=fieldnames)
    csv_output.writeheader()

    data = [
        ['url1', 'title1', 'author1', '1/1/2018', '2/1/2018', 'blah1'],
        ['url2', 'title2', 'author2', '1/1/2018', '2/1/2018', 'blah2'],
        ['url3', 'title3', 'author3', '1/1/2018', '2/1/2018', 'blah3'],
        ['url4', 'title4', 'author4', '1/1/2018', '2/1/2018', 'blah4']]

    for news_url, news_title, news_author, date_pub, date_up, news_desc in data:
        data_list = {
            'news_url': news_url,
            'news_title': news_title,
            'news_author': news_author,
            'date_pub': date_pub,
            'date_up': date_up,
            'news_desc': news_desc}

        csv_output.writerow(data_list)

这将创建包含以下内容的names.csv

news_url,news_title,news_author,date_pub,date_up,news_desc
url1,title1,author1,1/1/2018,2/1/2018,blah1
url2,title2,author2,1/1/2018,2/1/2018,blah2
url3,title3,author3,1/1/2018,2/1/2018,blah3
url4,title4,author4,1/1/2018,2/1/2018,blah4

如果数据真的是类似data上面,然后用DictWriter是有点矫枉过正作为你的数据应该已经在正确的顺序和大小元素的列表。 如果是这种情况,下面的方法将容易得多:

import csv

fieldnames = ['news_url', 'news_title', 'news_author', 'date_pub', 'date_up', 'news_desc']

with open('names.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(fieldnames)

    data = [
        ['url1', 'title1', 'author1', '1/1/2018', '2/1/2018', 'blah1'],
        ['url2', 'title2', 'author2', '1/1/2018', '2/1/2018', 'blah2'],
        ['url3', 'title3', 'author3', '1/1/2018', '2/1/2018', 'blah3'],
        ['url4', 'title4', 'author4', '1/1/2018', '2/1/2018', 'blah4']]

    csv_output.writerows(data)

这将产生相同的输出。 他们都假定您使用的是Python3.x。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM