我正在尝试从csv中提取数据,对其进行一些格式化,然后将其写回到相同的csv或新的csv(无首选项)。原始csv中大约有1500行,我无法以相同的方式将其写回。
我的代码是
OBJECTID = []
KKOD = []
KATEGORI = []
SHAPE_Length = []
with open(tempcsv, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
OBJECTID.append(row.get('OBJECTID'))
KKOD.append(row.get('KKOD'))
KATEGORI.append(row.get('KATEGORI'))
SHAPE_Length.append(row.get('SHAPE_Length'))
#Puts data in lower case
KATEGORI = [kategori.lower() for kategori in KATEGORI]
#finds all non standard characters
catstrip = ([s.strip('¤') for s in KATEGORI])
#delets all non standard characters
categories = ([s.replace('¤', '') for s in KATEGORI])
print(categories)
with open('mycsv.csv', 'w', newline='') as k:
fieldnames = ['OBJECTID', 'KKOD','KATEGORI','SHAPE_Length']
writer = csv.DictWriter(k, fieldnames=fieldnames)
writer.writeheader()
for i in tempcsv(OBJECTID):
writer.writerow({"OBJECTID" : OBJECTID, "KKOD" : KKOD, "KATEGORI" : categories, "SHAPE_Length" : SHAPE_Length})
对象ID是我要在迭代器中使用的行数,但它返回TypeError错误:'str'对象不可调用。
如果我取消迭代器,它将所有输出写入一行。
答案 0 :(得分:1)
根据我从给定代码中了解的信息,您可能希望最后一部分像这样:
with open('mycsv.csv', 'w', newline='') as k:
fieldnames = ['OBJECTID', 'KKOD','KATEGORI','SHAPE_Length']
writer = csv.DictWriter(k, fieldnames=fieldnames)
writer.writeheader()
for i in range(len(OBJECTID)): # <- starting this line
writer.writerow({"OBJECTID" : OBJECTID[i], "KKOD" : KKOD[i], "KATEGORI" : categories[i], "SHAPE_Length" : SHAPE_Length[i]})
更多说明
此注释指出:“如果我取消迭代器,它将所有输出写入一行。”,因为您执行writer.writerow({"OBJECTID" : OBJECTID, "KKOD" : KKOD, "KATEGORI" : categories, "SHAPE_Length" : SHAPE_Length})
,请记住您将上面的每个值定义为[]
,即列表,因此您基本上将所有项目写到1行中。
您可能想查看官方文档以获取更多信息和示例:) https://docs.python.org/3/library/csv.html#writer-objects