Python文件处理:高效实现文本按词拆分并逐行写入新文件

Python文件处理:高效实现文本按词拆分并逐行写入新文件

本教程详细介绍了如何使用Python编写一个函数,实现将文本文件中的内容按词拆分,并将每个词逐行写入到另一个新文件中。文章涵盖了文件读写、字符串处理的关键技巧,并提供了健壮的代码示例,旨在帮助读者高效处理文本数据,避免常见错误,确保程序稳定运行。

在日常的数据处理任务中,我们经常需要对文本文件进行操作,例如提取其中的词语、统计词频等。本教程将重点讲解如何编写一个python函数,该函数能够读取一个文本文件,将其内容按词语进行拆分,并将每个词语单独写入到另一个新的文件中,每个词占据一行。

核心功能实现:words_from_file 函数详解

我们的目标是创建一个名为 words_from_file(filename1, filename2) 的函数。其中,filename1 是输入文件的路径,filename2 是输出文件的路径。

函数定义与参数函数签名清晰地表明了其功能和所需参数:

def words_from_file(filename1, filename2):    # 函数体

文件操作的正确姿势在Python中处理文件时,推荐使用 with open(…) as …: 语句。这种方式能够确保文件在使用完毕后自动关闭,即使发生错误也能正确释放资源,避免文件句柄泄露。

逐行读取与词语拆分从输入文件读取内容时,我们通常会逐行读取。对于每一行文本,我们需要将其拆分成独立的词语。Python的字符串方法 split() 是实现这一功能的理想选择。当不带参数调用 split() 时,它会根据任意空白字符(空格、制表符、换行符等)进行拆分,并返回一个词语列表。

                for line in f:  # 逐行读取输入文件                    words = line.split() # 将当前行拆分成词语列表

逐词写入与换行获取到词语列表后,我们需要遍历这个列表,并将每个词语写入到输出文件中。为了实现“每个词语单独一行”的要求,我们写入每个词后需要手动添加一个换行符 n。

                    for word in words:                        g.write(word + 'n') # 写入词语并添加换行符

错误处理文件操作可能会遇到各种问题,最常见的就是文件不存在(FileNotFoundError)。为了程序的健壮性,我们应该捕获并处理这类异常。使用 try…except FileNotFoundError: 可以精确地捕获文件未找到的错误,并给出友好的提示。

    try:        # 文件读写操作    except FileNotFoundError:        print("错误:文件未找到。请检查输入文件路径是否正确。")    except Exception as e: # 捕获其他可能的异常        print(f"发生未知错误:{e}")

完整代码示例

结合上述所有部分,words_from_file 函数的完整实现如下:

def words_from_file(filename1, filename2):    """    读取指定文本文件,将其内容按词语拆分,并将每个词语逐行写入到另一个新文件中。    参数:    filename1 (str): 输入文件的路径。    filename2 (str): 输出文件的路径。    """    try:        # 打开输入文件进行读取 (read mode 'r')        with open(filename1, 'r', encoding='utf-8') as f:            # 打开输出文件进行写入 (write mode 'w')            # 注意:输出文件在外部循环打开一次,避免重复打开关闭            with open(filename2, 'w', encoding='utf-8') as g:                for line in f:  # 逐行读取输入文件                    words = line.split()  # 将当前行拆分成词语列表 (默认按空白字符拆分)                    for word in words:                        g.write(word + 'n')  # 写入词语并添加换行符        print(f"文件 '{filename1}' 已成功处理,结果已写入 '{filename2}'。")    except FileNotFoundError:        print(f"错误:文件 '{filename1}' 未找到。请检查输入文件路径是否正确。")    except Exception as e:        print(f"处理文件时发生未知错误:{e}")

关键点解析与注意事项

输出文件的打开位置: 在提供的错误代码示例中,输出文件 g 在内部循环 for lines in f: 中被反复以写入模式 ‘w’ 打开。这意味着每处理一行输入,输出文件就会被清空并重新写入,导致最终只保留最后一行处理的结果。正确的做法是将输出文件的打开操作放在外部 with open 块中,确保它只被打开一次,并在整个处理过程中保持打开状态。本教程中的代码已修正此问题。

字符与词语的区别 原始代码中的 for word in lines: 实际上是遍历字符串 lines 中的每一个字符,而不是词语。例如,如果 lines 是 “hello world”,for word in lines: 会依次得到 ‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ‘, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’。而 line.split() 会得到 [‘hello’, ‘world’]。这是实现词语拆分的根本区别。

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

异常处理的精确性: 避免使用裸露的 except: 语句,因为它会捕获所有类型的异常,包括一些你可能不希望捕获的系统级错误,使得调试变得困难。推荐使用具体的异常类型,如 FileNotFoundError,以提高代码的可读性和可维护性。同时,可以添加一个通用的 except Exception as e: 来捕获其他未预料到的错误,并打印详细信息。

文件编码: 在打开文件时,明确指定 encoding=’utf-8′ 是一个好习惯,尤其是在处理包含非ASCII字符(如中文、日文等)的文本文件时,可以有效避免乱码问题。

如何使用

为了测试上述函数,我们可以创建一些虚拟文件:

1. 创建一个输入文件 input.txt:

这是一个示例文本文件。它包含多行文字,用于测试词语拆分功能。

2. 运行Python代码:

# 创建一个虚拟的输入文件with open('input.txt', 'w', encoding='utf-8') as f:    f.write("这是一个示例文本文件。n")    f.write("它包含多行文字,用于测试词语拆分功能。n")# 调用函数进行处理words_from_file('input.txt', 'output.txt')# 验证输出文件内容print("n--- output.txt 内容 ---")try:    with open('output.txt', 'r', encoding='utf-8') as f_out:        print(f_out.read())except FileNotFoundError:    print("输出文件 'output.txt' 未生成或未找到。")

预期 output.txt 内容:

这是一个示例文本文件。它包含多行文字,用于测试词语拆分功能。

总结

通过本教程,我们学习了如何编写一个健壮的Python函数 words_from_file,用于将文本文件按词语拆分并逐行写入新文件。这包括了正确的文件读写模式、高效的字符串处理方法 split()、以及重要的异常处理机制。掌握这些技能将有助于您更有效地进行Python文本数据处理。在实际应用中,您可以进一步扩展此函数,例如添加词语规范化(小写化、去除标点)、过滤停用词等功能,以满足更复杂的文本分析需求。

以上就是Python文件处理:高效实现文本按词拆分并逐行写入新文件的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PyTorch多标签图像分类:批量大小不一致问题的诊断与解决
上一篇 2025年12月14日 03:08:46
Python实现文本文件单词逐行写入新文件教程
下一篇 2025年12月14日 03:09:00

相关推荐

  • Java中的++n和n++究竟有何区别?

    Java 自增运算符 ++n 与 n++ 的陷阱 初学者常常对 Java 中的前缀自增运算符 (++n) 和后缀自增运算符 (n++) 的区别感到困惑。虽然它们看起来简单,但在复杂的表达式中,其行为却可能出乎意料。本文将深入解析其差异,并通过实例说明。 关键在于理解 ++n 和 n++ 的运算顺序。…

    2026年8月29日
    000
  • 百度浏览器历史记录管理 快速查找和清理浏览数据的方法

    清理百度浏览器历史记录不仅能保护隐私,还能提升浏览器运行速度和安全性;通过菜单进入“历史”功能,使用搜索框输入关键词、域名或日期筛选记录,可高效定位目标;选择性删除单条记录或通过“清除浏览数据”选项批量清理历史、缓存和Cookie,有助于减少网页加载异常、防止行为追踪,使浏览更流畅安全。 管理百度浏…

    2026年8月29日
    100
  • 如何解决字符串比较和差异分析问题?jfcherng/php-sequence-matcher助你提升PHP处理效率

    可以通过一下地址学习composer:学习地址 在处理文本比较和差异分析时,我曾遇到一个棘手的问题:如何在大量文本中高效地找出最长公共子序列。这在开发版本控制系统或文本差异分析工具时尤为重要。我尝试了多种方法,但效果都不理想。直到我发现了 jfcherng/php-sequence-matcher …

    用户投稿 2026年8月29日
    000
  • VSCode怎么弹出输出框_VSCode输出面板显示与隐藏管理教程

    输出面板是VSCode中用于集中查看任务、扩展、调试和Git等非交互式日志的核心工具,通过快捷键Ctrl+Shift+U快速打开,支持在不同输出通道间切换,可自定义自动弹出行为、位置及外观,与终端(交互式命令执行)和调试控制台(程序运行时交互)形成互补,提升开发效率。 在VSCode中,要弹出输出框…

    2026年8月29日
    300
  • MySQL触发器导致性能下降怎么办_如何优化或替代?

    MySQL触发器导致性能下降怎么办_如何优化或替代?MySQL触发器导致性能下降怎么办_如何优化或替代?MySQL触发器导致性能下降怎么办_如何优化或替代?MySQL触发器导致性能下降怎么办_如何优化或替代?

    mysql触发器性能问题主要源于执行效率低或操作频繁,优化需从减少工作量和提升执行方式入手。1.通过慢查询日志和explain分析定位性能瓶颈,优化sql语句并添加索引;2.拆分触发器逻辑,将不必要的操作移至应用层;3.控制触发频率,采用延迟或异步处理机制;4.考虑用存储过程替代触发器,利用其预编译…

    2026年8月29日 用户投稿
    100
  • 百度浏览器兼容模式切换 解决网页显示问题的实用指南

    兼容模式可解决百度浏览器访问老旧网站时的显示问题,通过切换至IE内核模拟渲染。2. 网页异常多因历史遗留技术与现代标准不兼容,兼容模式用Trident内核适配旧站,极速模式用Blink内核支持现代网页。3. 布局错乱、功能失效、资源无法加载等现象提示需切换兼容模式,点击地址栏右侧IE图标选择即可。 …

    2026年8月29日
    000
  • 小红书比特指纹浏览器是什么 社交平台专用浏览器功能解析

    比特指纹浏览器通过为每个账号生成独立的数字指纹和IP地址,实现多账号环境隔离,有效规避小红书等平台的账号关联与封禁风险。它深度伪装浏览器指纹(如User-Agent、Canvas、WebGL、字体、时区、屏幕分辨率等),结合代理IP和数据隔离技术,使每个账号看似来自不同设备和用户,解决多账号运营中的…

    2026年8月29日
    500
  • 从零开始学习UCOSII操作系统1–UCOSII的基础知识

    大家好,我们又见面了,我是你们的朋友全栈君。 从零开始学习UCOSII操作系统1–UCOSII的基础知识 前言: 首先,比较主流的操作系统包括UCOSII、FREERTOS和LINUX等,其中UCOSII的资料相对丰富得多。 更重要的是,我目前还没有能力深入研究Linux操作系统。因此,本次学习UC…

    2026年8月29日
    100
  • GoogleBard现在叫什么_GoogleBard更名为Gemini详情介绍

    Google将Bard更名为Gemini,标志着其AI战略的全面升级。1. 品牌统一:以Gemini命名核心对话产品,消除用户对技术与产品名混淆的认知障碍;2. 技术整合:底层全面采用Gemini系列模型,从Gemini Nano、Pro到Ultra 1.0,构建覆盖全场景的AI生态;3. 多模态强…

    2026年8月29日
    200
  • thinkpad think book主要区别是什么

    ThinkPad和ThinkBook虽同为兄弟笔记本,但定位不同。ThinkPad专注高端商务,稳定可靠,追求极致性能,价格高昂,如同深度优化的算法。ThinkBook主打性价比和时尚,功能强大,易于上手,价格亲民,类似封装良好的库。选择ThinkPad还是ThinkBook取决于您的需求和预算。 …

    用户投稿 2026年8月29日
    100
  • think book thinkpad区别是啥

    ThinkBook和ThinkPad定位不同:ThinkPad主打专业商务,ThinkBook针对大众市场。具体差异体现在硬件配置(ThinkPad更高端)、做工设计(ThinkPad更坚固耐用)、软件和服务(ThinkPad更专业)。考虑预算和需求选择:ThinkPad适合对性能、稳定、安全性要求…

    2026年8月29日
    100
  • PyGraphviz 安装使用

    在 windows 系统下,安装和使用 pygraphviz 的详细步骤如下: 安装 Python:选择 Python 版本并下载安装包,这里以 Python 3.4.4 的 msi 格式文件为例。访问 Python 下载页面进行下载。安装 Python 后,确保将 Python 安装目录添加到系统…

    2026年8月29日
    100
  • 酷睿i7和i5的区别 两者哪个好介绍

    酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍

    电脑处理器选购时,不少用户都会在intel酷睿i5与i7之间陷入纠结。作为消费级市场中高端定位的两大主力系列,这两款处理器在性能表现、价格区间以及适用场景上各有特点。那么,i7和i5究竟有何不同?哪一款更契合你的需求?本文将从核心参数、实际表现、使用场景及性价比四个维度进行深入剖析。 一、酷睿i5与…

    2026年8月29日 用户投稿
    100
  • regard as和think of as区别是什么

    regard as 和 think of as 皆意为“视作”,区别在于视角和正式程度。regard as 较为正式,强调客观判断,常用于学术论文等。think of as 偏口语化,强调主观感受,适用于非正式对话或写作。可通过代码模拟这种视角差异,regard_as 模拟系统判断,而 think_…

    2026年8月29日
    200
  • 美团点评商家如何做小红书?

    近期合作的商家,基本是过去在美团、淘宝做得很好。但因美团点评、淘宝的流量在下降,为了生存,选择将小红书成为新销售渠道。 他们只知道,小红书用户很优质、购买力高。但真正实操的时候,发现平台规则很严,各种限流、内容创作不知道如何做,这些都让点评商家转型做小红书很难。 如何快速转型?我建议从这些方面着手。…

    2026年8月29日
    100
  • safari浏览器“个人收藏”和“书签”有什么区别_safari浏览器收藏功能详解

    个人收藏用于快速访问常用网站,显示在起始页卡片中,支持手动添加或系统推荐,数量建议少而精;书签则用于系统化保存网页链接,可分类存储于文件夹并跨设备同步,管理更灵活。两者区别主要体现在位置、数量、管理方式和同步机制:个人收藏限起始页展示,操作简便,适合高频访问;书签可通过侧边栏或多级目录管理大量链接,…

    2026年8月29日
    200
  • Win7系统使用的不是Administrator管理员账号怎么回事?

    在Windows系统中,存在一个特殊的账户,名为Administrator管理员账户。这个账户具备最高权限,可以执行各种系统级别的操作。不过,有些用户在使用Win7操作系统时,发现自己当前所用的并非Administrator账户,而是一个普通用户账户。这是什么原因造成的呢? 首先需要说明的是,在安装…

    2026年8月29日
    100
  • 网易也做了个小红书!

    村长第1114原创 不扯高大上 只讲真实干 感谢关注、评论和转发 各位村民好,我是村长 网易盯上了小红书,也要搞种草社交了。 这是今天刷新闻的时候,看到的一条内容,于是出于职业习惯的去打开看了一下。 果然,网易上线了一个内容分享内的产品叫:网易小蜜蜂。 01 网易小蜜蜂,要做翻版小红书? 网易作为国…

    2026年8月29日
    100
  • workerman是怎么区分用户的

    WorkerMan区分用户的方式取决于连接ID,将连接ID与用户数据关联。具体方法包括:字典映射(低并发场景)、Redis哈希结构(高并发场景)、数据库(复杂数据管理)。优化要点:选择合适的数据存储、使用连接池、采用异步操作、处理错误、保证代码可读。 WorkerMan用户区分:深度剖析与最佳实践 …

    2026年8月29日
    100
  • Spring Boot整合MyBatis:@Mapper、@MapperScan和mybatis.mapper-locations如何协同工作?

    Spring Boot集成MyBatis时,@Mapper、@MapperScan注解和mybatis.mapper-locations配置文件参数如何协同工作?本文将详细解释它们之间的区别,并说明为何缺少mybatis.mapper-locations配置会导致org.apache.ibatis.…

    2026年8月28日
    200

发表回复

登录后才能评论
关注微信