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

在python中,如何更新CSV文件中超过5K行的值?,python,python-3.x,pandas,csv,dictionary,Python,Python 3.x,Pandas,Csv,Dictionary,我是python的初学者,在读写同一个文件时,是否有任何方法可以更新csv文件,或者是否有其他方法可以做到这一点。欢迎所有建议 注意:我有一个记录为5k及以上的CSV文件 我要做的是逐行读取csv文件,如果msg_sent的值为False,则将其更新为True 这是我尝试过的代码片段,但它在CSV文件末尾添加了一行新行,而不是更新它 在同一文件中读写时,我可以用任何方式更新csv文件 CSV文件只是文本文件,因此您可以使用工具处理文本文件。Python有一个模块,该模块有上下文提示就地选项,它

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

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

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

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

在同一文件中读写时,我可以用任何方式更新csv文件


CSV文件只是文本文件,因此您可以使用工具处理文本文件。Python有一个模块,该模块有上下文提示
就地
选项,它有一个示例,如何修改文件的内容,而不是创建一个新文件。

如我上面的评论所示-使用熊猫

如果您想用
msg_sent==False
将所有行更新为
True
只需使用
df.loc[~df.msg_sent,'msg_sent']=True
或更短的
df.msg_sent=True
,因为只有两种可能是True和False

如果只想写回为False的行并将其
msg\u sent
值设置为True,请使用
df=df.loc[~df.msg\u sent].分配(msg\u sent=True)

完整示例(对于案例2):


我认为同时读写同一个文件不是一个好主意。由于您指定了
pandas
标记,我建议使用
read\u csv
读取整个文件(5K行不多),然后更新列,然后将其写回
至\u csv
。它只有3行,可能不会那么麻烦。
pandas
更容易-你不需要把
循环
n一行一行去-只要这样做就可以得到你的结果-
df[df['msg_sent']==False]
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)
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')