在python中,如何更新CSV文件中超过5K行的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中,如何更新CSV文件中超过5K行的值?相关的知识,希望对你有一定的参考价值。

我是python的初学者,有没有什么方法可以让我在同一个文件中一边读写一边更新csv文件,或者有什么其他的方法可以做到这一点。欢迎大家的建议。

注:我有一个CSV文件,记录在5k以上。

我想做的是逐行读取csv文件,如果值是 msg_sentFalse 然后更新为 True enter image description here

以下是我试过的代码片段,但它在CSV文件的末尾添加了一行新的内容,而不是更新它。

with open('subscribers.csv', 'r+') as subscribers_csv:
reader = csv.DictReader(subscribers_csv)
writer = csv.DictWriter(subscribers_csv,
                        delimiter=",",
                        lineterminator="
",
                        fieldnames=['user_id', 'name', 'msg_sent'])
    for subscriber in reader:
        if subscriber['msg_sent'] == 'False':
            subscriber_row = {'user_id': subscriber['user_id'],
                              'name': subscriber['name'],
                              'msg_sent': True}
            writer.writerow(subscriber_row)
答案

根据我上面的评论--使用pandas。

如果你想更新所有的行与 msg_sent==FalseTrue 就用 df.loc[~df.msg_sent, 'msg_sent'] = True 或更短 df.msg_sent = True 因为只有True和False两种可能。

如果你想只写回那些为False的行,并设置它们的 msg_sent 值为True使用 df = df.loc[~df.msg_sent].assign(msg_sent=True)

完整的例子(案例2)。

import pandas as pd
df = pd.read_csv('subscribers.csv')
df = df.loc[~df.msg_sent].assign(msg_sent=True)
df.to_csv('subscribers.csv')
另一答案

我有什么办法可以更新csv文件,同时在同一个文件中读写。

CSV文件只是文本文件,所以可以使用工具来处理文本文件。Python有 文件输入 模块,它具有 fileinput.input 语境 inplace 选项。pymotw.com 有例子,如何 修改文件的内容,而不是新建一个文件。.

以上是关于在python中,如何更新CSV文件中超过5K行的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中超过最大更新深度

删除列中超过 30 天的所有行的过程

yii2中超过120秒的最大执行时间[重复]

SSIS HH::MM:SS 到秒,HH 部分在 SSIS 中超过 24

如何使用 Python 比较 2 个非常大的矩阵

python如何读取csv指定内容所在行的第二列内容?