我想做以下事情 读取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)