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' object is not callable。
如果我把迭代器拿走,它会将所有输出写入一行。
解决方案
根据我对给定代码的理解,您可能希望最后一部分是这样的:
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
推荐阅读
- arrays - 如果在创建文档时未提供值,则数组中的子文档将保存为空数组项
- javascript - ReactJS:如何在动作中正确实现 react-cookie?
- javascript - symfony 中的集成模板 reactjs
- javascript - CYPRESS 将 cy.request 响应存储在变量中
- xaml - xaml 中的进度环不会阻止游戏手柄控制器动作?
- android - 使用带有 Firestore 的 collection.add() 应用程序崩溃
- c# - Azure 函数中没有 GetQueryNameValuePairs 的定义
- hive - 优化 Hive 查询从两个分区请求数据
- c++ - 使用 Visual C++ 在控制台中的文件浏览器
- sql - 如果列与 PostgreSQL 匹配,则使用另一个表中的数据更新表的列