python - 如何在 python 中添加两列并更新 CSV?
问题描述
我在这里有一个问题:
编写一个名为的函数,该函数
computed_column
将字符串作为参数,表示格式为 5 列的 CSV 文件的名称,<string>,<int>,<int>,<int>,<int>
并写入一个名为的文件,该文件creation.csv
包含来自输入文件的所有数据,但第六列包含来自第三和第二列。
这是我尝试过的:
import csv
def computed_column(csvfile):
with open(csvfile,newline='') as f:
with open('creation.csv','w',newline='') as f2:
y=[]
writer = csv.writer(f2)
rows = csv.reader(f)
for row in rows:
for i in range(0,len(row[1])):
y.append(int(row[1][i]) + int(row[2][i]))
writer.writerow(row+y)
它正确地写入了原始文件,但给了我要写入的第六列的错误输出。
解决方案
如果我正确理解了您的问题,则不需要内部 for 循环。对于每一行,您只需将(该行的)第二列和第三列中的值相加,并将总和作为第六列值插入。您只需要遍历每一行,然后使用row
索引访问第二列和第三列。
此外,您的列表y
随着您处理的每一行而增长(每次都会添加一个额外的列)。我不认为这是你的意图。在你的 for 循环中移动它,以便它重置为每行的空列表。尝试这样的事情:
def computed_column(csvfile):
with open(csvfile,newline='') as f:
with open('creation.csv','w',newline='') as f2:
writer = csv.writer(f2)
rows = csv.reader(f)
for row in rows:
y=[]
y.append(int(row[1]) + int(row[2]))
writer.writerow(row+y)
推荐阅读
- flutter - 请求 API 的最佳方式是什么
- python - 计算作业的平均总分
- java - 我有一个 RecyclerView 并且有多个复选框
- haskell - PrettyPrint 类方法签名缺少随附的绑定
- machine-learning - Pytorch:计算for循环在GPU和CPU上的运行时间
- typescript - 如何在仅具有默认功能的 tsx 文件中使用状态
- laravel - img src 无法显示图像 Laravel 8
- android - SVN版本控制如何知道其他队友是否正在使用同一个文件
- javascript - 从后端获取数据但不在浏览器中以角度显示数据
- sql - 在 where 子句的左侧如何使用合并函数?