如何在 Python 中向旧的 CSV 文件追加新行?
我正在尝试向旧的 CSV 文件添加新行。基本上,每次运行 Python 脚本时它都会更新。
现在,我将旧的 CSV 行值存储在列表中,然后删除 CSV 文件并使用新的列表值再次创建它。
我想知道是否有更好的方法可以做到这一点。
I am trying to add a new row to my old CSV file. Basically, it gets updated each time I run the Python script.
Right now I am storing the old CSV rows values in a list and then deleting the CSV file and creating it again with the new list value.
I wanted to know are there any better ways of doing this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
使用
'a'
参数打开文件允许您追加到文件末尾,而不是简单地覆盖现有内容。尝试一下。Opening a file with the
'a'
parameter allows you to append to the end of the file instead of simply overwriting the existing content. Try that.我更喜欢使用
csv
标准库中的模块和with
语句以避免让文件保持打开状态。关键点是在打开文件时使用
'a'
进行追加。如果您使用的是 Python 2.7,您可能会在 Windows 中遇到多余的新行。您可以尝试使用
'ab'
而不是'a'
来避免它们,但这会导致您TypeError:需要类似字节的对象,而不是 python 和 CSV 中的“str”。正如 Natacha 建议的那样,添加newline=''
会导致您 Python 2 和 3 之间向后不兼容。I prefer this solution using the
csv
module from the standard library and thewith
statement to avoid leaving the file open.The key point is using
'a'
for appending when you open the file.If you are using Python 2.7 you may experience superfluous new lines in Windows. You can try to avoid them using
'ab'
instead of'a'
this will, however, cause you TypeError: a bytes-like object is required, not 'str' in python and CSV in Python 3.6. Adding thenewline=''
, as Natacha suggests, will cause you a backward incompatibility between Python 2 and 3.根据 @GM 的回答并注意 @John La Rooy 的警告,我能够附加一个新行,以
'a'
模式打开文件。我没有尝试使用普通作家(没有字典),但我认为也可以。
Based in the answer of @G M and paying attention to the @John La Rooy's warning, I was able to append a new row opening the file in
'a'
mode.I didn't try with the regular writer (without the Dict), but I think that it'll be ok too.
如果您使用 pandas,您可以通过以下方式将数据帧附加到现有 CSV 文件:
使用 mode='a' 我们确保附加而不是覆盖,使用 header=False 我们确保仅附加 df 行的值,而不是标题+值。
If you use pandas, you can append your dataframes to an existing CSV file this way:
With mode='a' we ensure that we append, rather than overwrite, and with header=False we ensure that we append only the values of df rows, rather than header + values.
您是否使用“a”模式而不是“w”模式打开文件?
请参阅 python 文档中的读取和写入文件
Are you opening the file with mode of 'a' instead of 'w'?
See Reading and Writing Files in the python docs
我使用以下方法在 .csv 文件中附加新行:
[注意]:
mode='a'
是附加模式。I use the following approach to append a new line in a .csv file:
[NOTE]:
mode='a'
is append mode.如果文件存在并包含数据,则可以自动为
csv.DictWriter
生成fieldname
参数:If the file exists and contains data, then it is possible to generate the
fieldname
parameter forcsv.DictWriter
automatically: