如何不只是向csv添加新的第一列,而是更改标题名称

时间:2015-10-29 00:52:36

标签: python csv

我想做以下事情 读取csv文件,添加新的第一列,然后重命名一些列 然后从csv文件加载记录。 最后,我希望第一列填充文件 名称。 我是Python的新手,我已经研究了如何更改字段名称,但加载数据是一个问题,因为它正在寻找不再匹配的原始字段名。

代码段

import csv
import os
inputFileName = "manifest1.csv"
outputFileName = os.path.splitext(inputFileName)[0] + "_modified.csv"
with open(inputFileName, 'rb') as inFile, open(outputFileName, 'wb') as outfile:
    r = csv.DictReader(inFile)
    fieldnames = ['MapSvcName','ClientHostName', 'Databasetype', 'ID_A', 'KeepExistingData', 'KeepExistingMapCache', 'Name', 'OnPremisePath', 'Resourcestype']
    w = csv.DictWriter(outfile,fieldnames)
    w.writeheader()

***这是我开始出错的地方

# copy the rest
for node, row in enumerate(r,1):
    w.writerow(dict(row))

错误     文件“D:\ Apps \ Python27 \ ArcGIS10.3 \ lib \ csv.py”,第148行,在_dict_to_list中         +“,”。join([repr(x)for x in wrong_fields]))     ValueError:dict包含不在字段名中的字段:'Databases [xsi:type]','Resources [xsi:type]','ID'

希望得到一些帮助,不仅要学习,还要真正理解我需要做的事情。

干杯谢谢 彼得

更新.. 我想我已经解决了

import csv
import os
inputFileName = "manifest1.csv"
outputFileName = os.path.splitext(inputFileName)[0] + "_modified.csv"

with open(inputFileName, 'rb') as inFile, open(outputFileName, 'wb') as  outfile:
r = csv.reader(inFile)
w = csv.writer(outfile)

header = next(r)
header.insert(0, 'MapSvcName')
#w.writerow(header)

next(r, None)  # skip the first row from the reader, the old header
# write new header
w.writerow(['MapSvcName','ClientHostName', 'Databasetype', 'ID_A', 'KeepExistingData', 'KeepExistingMapCache', 'Name', 'OnPremisePath', 'Resourcestype'])

prevRow = next(r)
prevRow.insert(0, '0')
w.writerow(prevRow)
for row in r:
   if prevRow[-1] == row[-1]:
       val = '0'
   else:
       val = prevRow[-1]
   row.insert(0,val)
   prevRow = row
   w.writerow(row)

0 个答案:

没有答案