将多个列表中的多行写入CSV

时间:2020-03-23 12:42:23

标签: python-3.x csv

我正在尝试从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'对象不可调用。

如果我取消迭代器,它将所有输出写入一行。

1 个答案:

答案 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

相关问题