【问题标题】:In python how to update a value in CSV file which have more than 5K rows?在 python 中,如何更新 CSV 文件中超过 5K 行的值?
【发布时间】:2020-09-20 13:44:52
【问题描述】:

我是 python 的初学者,有什么方法可以在读取和写入同一个文件时更新 csv 文件,或者有其他方法可以做到这一点。欢迎所有建议。

注意:我有一个包含 5k 及以上记录的 CSV 文件。

我要做的是逐行读取csv文件,如果msg_sent的值为False,则将其更新为True

这是我尝试过的代码 sn-p 但它在 CSV 文件的末尾添加了一个新行而不是更新它,

with open('subscribers.csv', 'r+') as subscribers_csv:
reader = csv.DictReader(subscribers_csv)
writer = csv.DictWriter(subscribers_csv,
                        delimiter=",",
                        lineterminator="\n",
                        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 标记时,我建议使用read_csv 读取整个文件(5K 行并不多),然后更新列,然后使用to_csv 将其写回。它只有 3 行代码,可能不会那么令人头疼。
  • pandas 更容易 - 你不需要把 loop 逐行放置 - 这样做可以得到你的结果 - df[df['msg_sent'] == False]

标签: python python-3.x pandas csv dictionary


【解决方案1】:

我可以通过任何方式在同一个文件中读写时更新 csv 文件

CSV 文件只是文本文件,因此您可以使用工具进行文本文件处理。 Python 有 fileinput 模块,它有 fileinput.input context feauting inplace 选项,pymotw.com 有例子,如何修改文件的内容,而不是创建一个新文件。.

【讨论】:

    【解决方案2】:

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

    如果您想将所有带有msg_sent==False 的行更新为True,只需使用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')
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      相关资源
      最近更新 更多