【问题标题】:Replacing a row in csv file using Python 3使用 Python 3 替换 csv 文件中的一行
【发布时间】:2019-07-10 02:42:50
【问题描述】:

我有一个问题的变体已经被问过,但我无法在我之前的所有帖子中找到针对我的特定问题的答案。所以我希望有人可以帮助我...

我有一个这样的 csv 文件(在此示例中,共有 18 行和 4 列,前 2 行包含标题)。

“员工.csv”17 ID 名称 值 位置 25-2002 詹姆斯 1.2919 金融 25-2017 马修 2.359 法律 30-3444 Rob 3.1937 行动 55-8988 弗雷德 3.1815 研究 26-1000 丽莎 4.3332 研究 56-0909 约翰 3.3533 法律 45-8122 安娜 3.8887 财务 10-1000 雷切尔 4.1448 维护 30-9000 弗兰克 3.7821 维护 25-3000 安吉拉 5.5854 服务 45-4321 克里斯托弗 9.1598 法律 44-9821 麦迪 8.5823 服务 20-4000 露丝 7.47 操作 50-3233 维拉 5.5092 操作 65-2045 悉尼 3.4542 行政人员 45-8720 弗拉基米尔 0.2159 财务

我想将第 3 列中的值四舍五入为 2 位小数,即 round(value, 2)。所以基本上,我想打开文件,读取第 3 列(减去前 2 行),对每个值进行四舍五入,将它们写回,然后保存文件。在阅读了其他类似的帖子后,我现在了解到最好总是创建一个临时文件来完成这项工作,而不是尝试一次更改同一个文件。所以我有以下代码:

import csv, os
val = []

with open('path/Employees.csv', 'r') as rf, open('path/tmpf.csv, 'w') as tmpf:
    reader = csv.reader(rf)
    writer = csv.writer(tmpf)
    for _ in range(2): #skip first 2 rows
        next(reader)
    for line in reader:
        val.append(float(line[2]))  # read 3 column into list 'val'

#    [... this is where i got stuck!  
#     ... how do I round each value of val, and
#     ... write everything back to the tmpf file ?]

os.remove('path/Employees.csv')
os.rename('path/tmpf', 'path/Employees.csv')

谢谢!

【问题讨论】:

标签: python-3.x csv overwrite


【解决方案1】:

你可以

rounded_val = [ round (v,2) for v in val ]

生成四舍五入值列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多