【发布时间】:2016-05-22 00:19:04
【问题描述】:
我正在寻找使用 dictreader / dictwriter 重命名标题的最佳方法,以添加到我已经完成的其他步骤中。
这就是我试图对下面的源数据示例做的事情。
- 删除前 2 行
- 与源文件相比,将列(标题和数据)重新排序为 2、1、3
- 将标题重命名为 ASXCode、CompanyName、GISC
当我在时
如果我使用'reader = csv.reader.inf',第一行将被删除,列重新排序,但正如预期的那样,没有标题重命名
当我运行 dictreader 行 'reader = csv.DictReader(inf, fieldnames=('ASXCode', 'CompanyName', 'GICS'))' 时,我收到错误消息 'dict contains fields not in fieldnames:' 和显示第一行数据而不是标题。
我对如何解决这个问题有点困惑,所以任何提示都值得赞赏。
源数据示例
ASX listed companies as at Mon May 16 17:01:04 EST 2016
Company name ASX code GICS industry group
1-PAGE LIMITED 1PG Software & Services
1300 SMILES LIMITED ONT Health Care Equipment & Services
1ST AVAILABLE LTD 1ST Health Care Equipment & Services
我的代码
import csv
import urllib.request
from itertools import islice
local_filename = "C:\\myfile.csv"
url = ('http://mysite/afile.csv')
temp_filename, headers = urllib.request.urlretrieve(url)
with open(temp_filename, 'r', newline='') as inf, \
open(local_filename, 'w', newline='') as outf:
# reader = csv.DictReader(inf, fieldnames=('ASXCode', 'CompanyName', 'GICS'))
reader = csv.reader(inf)
fieldnames = ['ASX code', 'Company name', 'GICS industry group']
writer = csv.DictWriter(outf, fieldnames=fieldnames)
# 1. Remove top 2 rows
next(islice(reader, 2, 2), None)
# 2. Reorder Columns
writer.writeheader()
for row in csv.DictReader(inf):
writer.writerow(row)
【问题讨论】:
-
请提供一个简短的完整程序来演示该问题。请包括样本输入以及实际和预期的输出。请包括任何错误消息的全文。请参阅minimal reproducible example 了解更多信息。