如何在 Python 中将新行附加到旧的 CSV 文件?

2025-02-05 13:24:00
admin
原创
98
摘要:问题描述:我正在尝试向我的旧 CSV 文件添加新行。基本上,每次运行 Python 脚本时它都会更新。现在,我将旧的 CSV 行值存储在列表中,然后删除 CSV 文件并使用新的列表值再次创建它。我想知道是否有更好的方法可以做到这一点。解决方案 1:with open('document.csv','a') a...

问题描述:

我正在尝试向我的旧 CSV 文件添加新行。基本上,每次运行 Python 脚本时它都会更新。

现在,我将旧的 CSV 行值存储在列表中,然后删除 CSV 文件并使用新的列表值再次创建它。

我想知道是否有更好的方法可以做到这一点。


解决方案 1:

with open('document.csv','a') as fd:
    fd.write(myCsvRow)

使用参数打开文件'a'允许您将内容附加到文件末尾,而不是简单地覆盖现有内容。 尝试一下。

解决方案 2:

我更喜欢使用csv标准库中的模块和with语句来避免文件打开。

关键点是'a'在打开文件时使用它来附加。

import csv   
fields=['first','second','third']
with open(r'name', 'a') as f:
    writer = csv.writer(f)
    writer.writerow(fields)

如果您使用的是 Python 2.7,您可能会在 Windows 中遇到多余的换行符。您可以尝试使用'ab'而不是 来避免它们'a',但是,这会导致TypeError:在 python 中需要类似字节的对象,而不是 'str' ,而在 Python 3.6 中则会导致 CSVnewline='' 。正如 Natacha 所建议的那样,添加将导致Python 2 和 3 之间的向后不兼容。

解决方案 3:

根据@GM 的回答并注意@John La Rooy 的警告,我能够添加一个新行以在'a'模式下打开文件。

即使在 Windows 中,为了避免换行符问题,也必须将其声明为newline=''

现在您可以在模式下打开文件'a'(不带 b)。

import csv

with open(r'names.csv', 'a', newline='') as csvfile:
    fieldnames = ['This','aNew']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writerow({'This':'is', 'aNew':'Row'})

我没有尝试使用常规书写器(没有 Dict),但我认为它也可以。

解决方案 4:

如果你使用 pandas,则可以通过以下方式将数据框附加到现有的 CSV 文件:

df.to_csv('log.csv', mode='a', index=False, header=False)

使用 mode='a' 我们确保附加而不是覆盖,使用 header=False 我们确保仅附加 df 行的值,而不是 header + 值。

解决方案 5:

您是否以“a”模式而不是“w”模式打开文件?

请参阅Python 文档中的“读取和写入文件”

7.2. 读写文件

open() 返回一个文件对象,最常用的是两个参数:open(filename, mode)。

>>> f = open('workfile', 'w')
>>> print f <open file 'workfile', mode 'w' at 80a0960>

第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含几个字符,用于描述文件的使用方式。当文件仅可读取时,模式可以是“r”,当文件仅可写入时,模式可以是“w”(将删除具有相同名称的现有文件),而“a”则打开文件进行追加;写入文件的任何数据都会自动添加到末尾。“r+”打开文件进行读取和写入。模式参数是可选的;如果省略,则假定为“r”。

在 Windows 上,模式后面附加“b”会以二进制模式打开文件,因此还有“rb”、“wb”和“r+b”等模式。Windows 上的 Python 区分文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动略微改变。这种对文件数据的幕后修改对于 ASCII 文本文件来说没问题,但它会损坏 JPEG 或 EXE 文件中的二进制数据。在读取和写入此类文件时,请务必小心使用二进制模式。在 Unix 上,将“b”附加到模式不会有什么坏处,因此您可以独立于平台地将其用于所有二进制文件。

解决方案 6:

我使用以下方法在 .csv 文件中添加新行:

pose_x = 1 
pose_y = 2

with open('path-to-your-csv-file.csv', mode='a') as file_:
    file_.write("{},{}".format(pose_x, pose_y))
    file_.write("
")  # Next line.

[笔记]:

  • mode='a'是追加模式。

解决方案 7:

如果文件存在且包含数据,则可以自动生成fieldname参数csv.DictWriter

# read header automatically
with open(myFile, "r") as f:
    reader = csv.reader(f)
    for header in reader:
        break

# add row to CSV file
with open(myFile, "a", newline='') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writerow(myDict)

解决方案 8:

# I like using the codecs opening in a with 
field_names = ['latitude', 'longitude', 'date', 'user', 'text']
with codecs.open(filename,"ab", encoding='utf-8') as logfile:
    logger = csv.DictWriter(logfile, fieldnames=field_names)
    logger.writeheader()

# some more code stuff 

    for video in aList:
        video_result = {}                                     
        video_result['date'] = video['snippet']['publishedAt']
        video_result['user'] = video['id']
        video_result['text'] = video['snippet']['description'].encode('utf8')
        logger.writerow(video_result) 
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用