使用Python将CSV文件按行拆分为多个独立文件并妥善管理

使用python将csv文件按行拆分为多个独立文件并妥善管理

本文详细介绍了如何使用Python的csv模块将一个大型CSV文件中的每一行数据拆分并写入到单独的CSV文件中。核心内容包括利用csv.writer正确处理CSV格式,以及通过contextlib.ExitStack和字典管理多个文件写入器,以高效、健壮地解决文件名冲突和资源管理问题,确保数据准确无误地分散到指定的新文件中。

1. CSV数据拆分与写入基础

在Python中处理CSV文件时,如果需要将原始文件中的每一行或特定行的数据提取出来,并保存到以行内容命名的独立CSV文件中,一个常见的需求是将特定字段作为新文件的文件名,并将其他字段写入到这个新文件中。

假设我们有一个包含Order Number、Date和File Name三列的CSV文件,目标是为每一行创建一个新的CSV文件,文件名取自File Name字段,新文件中只包含Order Number和Date字段,且不带表头。

最初尝试可能直接使用f.write()方法将字段内容写入文件。然而,这种方法存在一个核心问题:f.write()仅仅是写入字符串,它不会自动添加CSV文件所需的字段分隔符(如逗号)。这会导致所有字段内容被连接成一个单一的字符串,而不是以逗号分隔的多个字段。

错误示例(仅供理解问题,不建议使用):

立即学习“Python免费学习笔记(深入)”;

import csv# 假设TestExport.csv存在于指定路径# with open("//server2/shared/Data/TestExport.csv",'r') as csvfile:#         reader = csv.DictReader(csvfile)#         for row in reader:#             file_name ='{0}.csv'.format(row['FileName'])#             with open(file_name, 'w') as f:#                    f.write(row['Order Number'])#                    f.write(row['Date'])

上述代码的问题在于f.write(row[‘Order Number’])和f.write(row[‘Date’])会将两个字符串直接连接起来,例如123452023-01-01,而不是12345,2023-01-01。

2. 使用csv.writer正确写入CSV数据

解决上述问题的关键在于使用Python内置csv模块提供的csv.writer对象。csv.writer专门用于处理CSV格式的写入,它能够自动处理字段分隔符和行结束符。

核心改进点:

小绿鲸英文文献阅读器 小绿鲸英文文献阅读器

英文文献阅读器,专注提高SCI阅读效率

小绿鲸英文文献阅读器 437 查看详情 小绿鲸英文文献阅读器 csv.writer(out_f, delimiter=’,’): 创建一个CSV写入器,并指定逗号作为字段分隔符。writer.writerow([…]): 使用此方法写入一行数据。它接受一个列表作为参数,列表中的每个元素将作为一个字段写入,并自动添加分隔符。newline=”: 在打开文件时,对于csv.writer,必须指定newline=”。这是因为csv模块会自行处理换行符,如果Python的默认换行转换机制也介入,可能会导致文件中出现双重换行,或在不同操作系统间产生兼容性问题。

正确实现示例:

import csv# 假设TestExport.csv是你的源文件source_csv_path = "//server2/shared/Data/TestExport.csv"with open(source_csv_path, 'r', encoding='utf-8') as in_f: # 建议指定编码    reader = csv.DictReader(in_f)    for row in reader:        # 根据'FileName'字段生成新CSV的文件名        file_name = '{0}.csv'.format(row['FileName'])        # 以写入模式打开新文件,并指定newline=''        with open(file_name, 'w', newline='', encoding='utf-8') as out_f: # 建议指定编码            # 创建csv写入器,指定逗号为分隔符            writer = csv.writer(out_f, delimiter=',')            # 写入Order Number和Date字段。writerow接受一个列表            writer.writerow([row['Order Number'], row['Date']])print("所有行已成功拆分并写入独立CSV文件。")

这段代码能够正确地将每一行数据拆分并写入到各自的CSV文件中,每个新文件只包含Order Number和Date两个字段,并以逗号分隔。

3. 处理文件名冲突与资源管理:使用contextlib.ExitStack

上述解决方案虽然正确,但存在一个潜在问题:如果源CSV文件中有两行或多行具有相同的File Name字段值,那么后一行的数据将覆盖前一行的数据,因为每次循环都会重新打开并清空同名文件。此外,频繁地打开和关闭文件也可能影响性能。

为了解决这个问题,我们可以采用更高级的策略:

复用写入器: 使用一个字典来存储已经创建的csv.writer对象。当遇到一个已存在文件名的行时,直接使用字典中对应的写入器追加数据,而不是重新创建文件。统一文件管理: 由于我们会打开多个文件并保持它们处于打开状态以供复用,我们需要一种机制来确保所有这些文件最终都能被正确关闭。contextlib.ExitStack是处理这种情况的理想工具。它允许你在一个with语句块中管理多个上下文管理器(如文件对象),并在with块结束时自动关闭所有被管理的资源。

健壮的解决方案示例:

import csvimport contextlibsource_csv_path = "//server2/shared/Data/TestExport.csv"with open(source_csv_path, 'r', encoding='utf-8') as in_f:    # writers字典用于存储每个文件对应的csv.writer对象    # 键是文件名,值是对应的csv.writer实例    writers = {}    # 使用ExitStack来管理所有打开的文件对象    with contextlib.ExitStack() as stack:        reader = csv.DictReader(in_f)        for row in reader:            file_name = '{0}.csv'.format(row['FileName'])            # 尝试从writers字典中获取当前文件名的写入器            writer = writers.get(file_name)            # 如果该文件名的写入器尚未创建            if writer is None:                # 使用stack.enter_context()打开新文件。                # ExitStack会负责在with块结束时关闭此文件。                out_f = stack.enter_context(open(file_name, 'w', newline='', encoding='utf-8'))                # 创建新的csv写入器并存储到writers字典中                writer = csv.writer(out_f)                writers[file_name] = writer                # (可选)为新创建的文件写入表头                # 如果不需要表头,可以删除下面这行                writer.writerow(['OrderNumber', 'Date'])            # 使用获取到的(或新创建的)写入器写入数据行            writer.writerow([row['Order Number'], row['Date']])print("所有行已成功拆分并写入独立CSV文件,重复文件名的数据已追加。")

4. 代码详解与注意事项

contextlib.ExitStack: 这是一个强大的上下文管理器。通过stack.enter_context(resource),你可以将任何上下文管理器(如open()返回的文件对象)注册到ExitStack中。当最外层的with contextlib.ExitStack() as stack:块结束时,无论以何种方式(正常退出、异常),ExitStack都会确保所有注册的资源按LIFO(后进先出)顺序被正确关闭。这避免了手动管理多个文件句柄的复杂性。writers 字典: 这个字典是实现写入器复用的关键。它将文件名映射到对应的csv.writer对象。当处理一行数据时,程序首先检查writers中是否已有该文件名的写入器。如果没有,就创建一个新的文件和写入器,并将其添加到字典中;如果已经存在,则直接使用已有的写入器进行写入。可选的表头写入: 在if writer is None:块中,我们可以在文件首次被创建时写入一个表头(writer.writerow([‘OrderNumber’, ‘Date’]))。这确保了每个新生成的CSV文件都有一个清晰的表头,并且表头只会被写入一次。如果不需要表头,可以删除这行代码。编码(encoding=’utf-8’): 在打开文件时,显式指定编码是一个好习惯,尤其是处理包含非ASCII字符的数据时,utf-8是推荐的通用编码。性能: 相比于每次循环都打开和关闭文件,使用ExitStack和写入器复用可以显著提高处理大量数据时的性能,因为它减少了文件I/O操作的开销。

总结

通过本教程,我们学习了如何使用Python的csv模块将一个CSV文件按行拆分为多个独立的CSV文件。从基础的csv.writer使用到更高级的contextlib.ExitStack和字典组合,我们解决了文件名冲突和资源管理问题,确保了数据拆分过程的准确性、健壮性和高效性。掌握这些技术将帮助你在处理CSV数据时更加灵活和专业。

以上就是使用Python将CSV文件按行拆分为多个独立文件并妥善管理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/925985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 10:14:06
下一篇 2025年11月29日 10:18:18

相关推荐

  • 币圈十大比特币交易所

    最新排名 1. Binance 全球交易量领先的数字货币交易所之一。提供丰富的交易对和衍生品交易。拥有强大的技术实力和安全保障措施。用户基数庞大,流动性良好。 2. OKX 知名的加密货币交易平台,提供现货、合约等多种交易服务。支持多种数字资产交易。安全风控体系完善。提供API接口,方便量化交易。 …

    2025年12月8日 好文分享
    000
  • 币圈必备app_币圈必备网站_币圈行情APP推荐

    在信息高速流动的数字资产世界,掌握实时行情、获取关键资讯是每位参与者的必修课。本文将为你梳理并推荐一系列必备的应用程序和网站,它们覆盖了从市场数据、深度研究到社区交流的方方面面,旨在帮助你构建完整的信息网络,做出更明智的决策。 行情与数据追踪工具 实时准确的数据是市场分析的基石。以下工具可以帮助你轻…

    2025年12月8日
    000
  • 2025有希望能像曾经SHIB爆发的币有哪些(三个推荐)

    2025年值得关注的三种meme币是Little Pepe (LILPEPE)、Bonk (BONK) 和 Pudgy Penguins (PENGU),它们具备高回报潜力及创新特性。1.LILPEPE是一种Shiba Inu替代品,价格为$0.0013,在littlepepe.com进行预售,潜在…

    2025年12月8日
    000
  • 比特币在哪里买卖交易app 比特币官网app正版安装

    比特币交易app是专为数字资产爱好者打造的移动端交易工具,它集成了实时行情查看、快捷买卖、资产管理等多种功能于一体,致力于为用户提供一个安全、便捷的交易环境。通过这款应用,您可以随时随地关注市场动态,并进行高效的交易操作。本文将为您提供官方正版应用的下载渠道,确保您获得安全可靠的数字资产交易体验。想…

    2025年12月8日
    000
  • 币安交易所app官方链接 币安binance官方最新地址

    币安交易所简介与官方最新地址 币安(binance)是全球知名的数字货币交易平台。它凭借庞大的交易量和广泛支持的数字资产种类,成为全球加密货币交易领域的重要参与者。平台致力于为用户提供安全、稳定、高效的数字资产交易与服务。自成立以来,币安迅速成长,建立了一个涵盖交易、投资、孵化、慈善等多个领域的强大…

    2025年12月8日
    000
  • 狗狗币行情网站有哪些 狗狗币免费行情网站推荐

    狗狗币作为一种广受欢迎的数字货币,其市场价格波动受到广泛关注。对于希望了解狗狗币实时表现的参与者来说,获取准确、及时的行情信息至关重要。幸运的是,有多种渠道可以免费查看狗狗币的最新价格、交易量以及历史数据。这些信息通常来源于数字货币交易平台或专业的行情聚合网站,它们提供了必要的工具和数据,帮助用户追…

    2025年12月8日
    000
  • 交易所排名 币圈前十交易所有哪些

    在数字资产的世界里,%ignore_a_1%交易所扮演着至关重要的角色,它们是连接普通用户与复杂加密金融市场的核心桥梁。这些平台不仅仅提供简单的买卖服务,其业务范围已经扩展到涵盖衍生品交易、资产质押、流动性挖框、新项目发行乃至去中心化金融应用的入口等多个维度。一个交易所的综合实力,通常通过其交易量、…

    2025年12月8日 好文分享
    000
  • 全球十大比特币交易平台

    全球比特币交易平台top10 1. Binance 全球交易量领先的数字货币交易所之一。提供丰富的交易对和衍生品交易。拥有强大的技术实力和安全保障措施。用户基数庞大,流动性良好。 2. OKX 知名的加密货币交易平台,提供现货、合约等多种交易服务。支持多种数字资产交易。安全风控体系完善。提供API接…

    2025年12月8日 好文分享
    000
  • 比安官网地址链接 比安最新官网地址

    比安,即binance,是全球领先的数字货币交易平台之一。该平台成立于2017年,迅速发展成为全球用户量和交易量最大的加密货币交易平台。binance提供包括现货交易、合约交易、期权交易等在内的多种交易服务,支持数百种加密货币的交易对。平台以其高流动性、相对较低的交易费用以及强大的技术架构而受到全球…

    2025年12月8日
    000
  • 2025数字货币新手宝典,抓住币圈红利不是梦

    要安全获取和保管数字资产,需选择正规平台并掌握基础认知。1. 获取途径:首选Binance、OKX、Coinbase、等合规平台,注意其安全性、用户评价及客服响应;2. 基础认知:数字资产是基于区块链技术的电子凭证,具有去中心化和不可篡改特性,其价值来源于稀缺性和技术应用;3. 保管方式:可选交易平…

    2025年12月8日
    000
  • 狗狗币下载安装教程(最全版)

    狗狗币是一种基于互联网模因的加密货币,最初为趣味项目,现已成为具有广泛认知度的数字资产,其特点包括低廉的交易费用和较快的确认速度。获取狗狗币应用的最安全方式是访问官方网站或通过推荐的应用商店下载,并请确保链接的真实性以避免恶意软件。 狗狗币(Dogecoin)是一种基于互联网模因而诞生的加密货币。它…

    2025年12月8日
    000
  • 狗狗币下载安装教程 手把手教学

    狗狗币应用应通过官方渠道下载以确保安全,具体步骤如下:1.访问官网或推荐应用商店找到下载链接;2.点击下载并等待完成;3.找到文件点击安装;4.如提示未知来源,暂时允许安装;5.按屏幕提示完成安装;6.在主屏幕点击图标启动应用;7.首次使用需创建或导入账户,并备份私钥。以上步骤可保障用户安全便捷地管…

    2025年12月8日
    000
  • Coinbase vs Kraken:合规性对比与用户体验测评(2025版)

    Coinbase和Kraken,作为加密货币领域的老牌选手,它们在2025年依然是许多交易者关注的焦点。它们不仅仅是简单的交易平台,更是承载着用户资产、连接着全球市场的金融基础设施。选择哪一个平台,往往意味着不同的合规策略、不同的产品生态,以及截然不同的用户体验。本文将深入探讨这两大平台的合规性差异…

    2025年12月8日
    000
  • Kraken VS Gemini:2025年欧美合规平台哪家更适合你?

    Kraken与Gemini均为合规性强的数字资产平台,但各有侧重。1. Kraken成立更早,全球合规布局广泛,服务多样,适合活跃交易者;2. Gemini以美国为核心,监管标准严苛,安全等级高,界面简洁,适合重视安全与新手用户;3. 费用方面,Kraken整体费率透明且提现明确,Gemini小额费…

    2025年12月8日
    000
  • 十大全球数字货币交易平台推荐

    在2025年,全球数字货币交易所的竞争依然激烈,但仍有一些交易所凭借其强大的市场表现和用户体验脱颖而出。以下是根据交易量、用户数量、安全性、创新性等多个维度评选出的2025年全球前十名数字货币交易所的排行榜。 1. Binance Binance 自成立以来一直是全球数字货币交易所的领头羊。2025…

    2025年12月8日 好文分享
    000
  • 必安交易所APP官方正版(Binance) 最新版v2.105.3安装指南

    必安交易所作为全球领先的数字资产交易平台之一,为用户提供了广泛的加密货币交易服务和丰富的功能。本文将为您提供必安交易所官方app的详细下载和安装教程。我们提供的是官方app下载链接,用户只需点击本文中提供的链接,即可安全、便捷地完成下载。 App介绍 必安交易所官方App是专为移动设备设计的交易工具…

    2025年12月8日
    000
  • 全球正规十大数字货币交易所排名

    在2025年,全球数字货币交易所的竞争依然激烈,但仍有一些交易所凭借其强大的市场表现和用户体验脱颖而出。以下是根据交易量、用户数量、安全性、创新性等多个维度评选出的2025年全球前十名数字货币交易所的排行榜。 1. Binance Binance 自成立以来一直是全球数字货币交易所的领头羊。2025…

    2025年12月8日 好文分享
    000
  • 以太坊在哪个APP购买正规?(注册认证、交易操作指南)

    您可以在Coinbase、Binance、OKX等正规数字资产交易平台购买以太坊。1.选择平台时需关注合规性、安全保障、用户口碑和透明费用;2.注册账户并完成身份认证(KYC),包括访问官网、创建账户、上传身份证件及地址验证;3.充值后查找ETH交易对,选择市价或限价订单进行购买;4.购买成功后建议…

    2025年12月8日
    000
  • 比特币交易平台top10 正规的比特币交易所

    比特币交易平台top10 1. Binance 全球交易量领先的数字货币交易所之一。提供丰富的交易对和衍生品交易。拥有强大的技术实力和安全保障措施。用户基数庞大,流动性良好。 2. OKX 知名的加密货币交易平台,提供现货、合约等多种交易服务。支持多种数字资产交易。安全风控体系完善。提供API接口,…

    2025年12月8日 好文分享
    000
  • 全球排名前十的数字货币交易所最新地址

    在2025年,全球数字货币交易所的竞争依然激烈,但仍有一些交易所凭借其强大的市场表现和用户体验脱颖而出。以下是根据交易量、用户数量、安全性、创新性等多个维度评选出的2025年全球前十名数字货币交易所的排行榜。 1. Binance Binance 自成立以来一直是全球数字货币交易所的领头羊。2025…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信