Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Python怎样读写文本文件_Python文件读写技巧总结_创想鸟

Python怎样读写文本文件_Python文件读写技巧总结

Python文件操作核心是open()函数和with语句,通过指定模式(如’r’、’w’、’a’)和编码(如’utf-8’、’gbk’)实现安全读写;使用with可自动关闭文件,避免资源泄漏;处理大文件时应逐行迭代或分块读取,防止内存溢出;需注意路径、权限和编码一致性,防止乱码或文件丢失。

python怎样读写文本文件_python文件读写技巧总结

Python读写文本文件,核心在于使用内置的

open()

函数。它就像是文件操作的大门,通过不同的模式参数,我们可以告诉Python是要读取文件内容、写入新内容、追加内容,还是做更复杂的操作。理解这个函数及其搭配的上下文管理器

with

语句,是高效且安全地处理文本文件的关键。

解决方案

在Python里,处理文本文件通常围绕着

open()

函数展开。这个函数返回一个文件对象,我们通过它来执行读写操作。

最基础的用法是这样的:

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

# 写入文件# 'w' 模式会创建新文件或覆盖已有文件try:    with open('my_document.txt', 'w', encoding='utf-8') as f:        f.write("这是我写的第一行文本。n")        f.write("第二行内容也来了。n")    print("文件写入成功。")except IOError as e:    print(f"写入文件时发生错误: {e}")# 读取文件# 'r' 模式用于读取文件,如果文件不存在会抛出FileNotFoundErrortry:    with open('my_document.txt', 'r', encoding='utf-8') as f:        content = f.read() # 读取所有内容        print("n读取到的文件内容:")        print(content)except FileNotFoundError:    print("文件不存在,无法读取。")except IOError as e:    print(f"读取文件时发生错误: {e}")# 追加内容# 'a' 模式会在文件末尾追加内容try:    with open('my_document.txt', 'a', encoding='utf-8') as f:        f.write("这是追加的新内容。n")    print("n内容追加成功。")except IOError as e:    print(f"追加文件时发生错误: {e}")# 逐行读取try:    print("n逐行读取文件内容:")    with open('my_document.txt', 'r', encoding='utf-8') as f:        for line_num, line in enumerate(f, 1):            print(f"第{line_num}行: {line.strip()}") # strip() 去掉行尾的换行符except FileNotFoundError:    print("文件不存在,无法读取。")except IOError as e:    print(f"读取文件时发生错误: {e}")

这里我强调一下

with open(...) as f:

这种写法。它真的太重要了!它保证了文件无论在读写过程中是否发生错误,最终都会被正确关闭,释放系统资源。我早期写代码时,经常忘记

f.close()

,结果就是文件句柄泄露,尤其是在循环里操作大量文件时,那真是个灾难。

with

语句完美解决了这个问题,让代码更健壮、更简洁。

Python文件读写中的编码问题:为什么我的文本文件读出来是乱码?

这个问题,老实说,我一开始也踩过不少坑,尤其是和不同操作系统、不同语言环境打交道的时候。文件编码问题,本质上是字符和字节之间转换的“翻译”问题。我们看到的文本是字符,但计算机存储的是字节序列。如果编码和解码使用的规则不一致,那自然就成了乱码。

最常见的场景是:你在Windows系统用记事本保存了一个GBK编码的文本文件,然后用Python在Linux环境下,默认以UTF-8去读取它。结果就是一堆看不懂的字符。

解决办法其实很简单,就是明确指定

open()

函数中的

encoding

参数。

# 假设有一个GBK编码的文件 'gbk_test.txt'# 你可以手动创建一个,比如在Windows记事本里输入中文,然后“另存为”选择GBK编码# gbk_test.txt 的内容可能是 "你好,世界!"# 错误示范:不指定编码或指定错误编码try:    with open('gbk_test.txt', 'r', encoding='utf-8') as f:        content = f.read()        print("尝试用UTF-8读取GBK文件(通常会乱码):")        print(content)except UnicodeDecodeError as e:    print(f"解码错误发生:{e}")except FileNotFoundError:    print("文件不存在,请确保创建了gbk_test.txt")# 正确示范:指定正确的编码try:    with open('gbk_test.txt', 'r', encoding='gbk') as f:        content = f.read()        print("n用GBK编码正确读取GBK文件:")        print(content)except FileNotFoundError:    print("文件不存在,请确保创建了gbk_test.txt")except Exception as e:    print(f"读取时发生其他错误: {e}")# 写入文件时也同样重要,确保写入的编码和你期望的一致try:    with open('output_utf8.txt', 'w', encoding='utf-8') as f:        f.write("这是一个UTF-8编码的文本。n")    print("n成功写入UTF-8文件。")    with open('output_gbk.txt', 'w', encoding='gbk') as f:        f.write("这是一个GBK编码的文本。n")    print("成功写入GBK文件。")except Exception as e:    print(f"写入文件时发生错误: {e}")

常用的编码有

'utf-8'

(推荐,跨平台兼容性最好)、

'gbk'

(中文Windows系统常见)、

'latin-1'

(单字节编码,处理一些特殊字符或二进制数据时可能用到)。如果你不确定文件的编码,可以尝试一些库,比如

chardet

,它能帮你猜测文件的编码,但这也不是100%准确的。最好的做法还是在文件创建时就约定好编码,或者在文档中明确指出。

Python大文件读写优化:如何高效处理TB级数据?

处理大文件,特别是那种GB甚至TB级别的文件,直接

f.read()

把所有内容加载到内存里,那绝对是个糟糕的主意,分分钟内存溢出,程序崩溃。高效处理大文件的核心思想是:分块读取,流式处理,避免一次性加载全部内容。

Python的文件对象本身就是可迭代的(iterable),这意味着我们可以直接在

for

循环中迭代它,每次读取一行内容,而不是一次性读取整个文件。

def process_large_file(filepath):    line_count = 0    word_count = 0    char_count = 0    print(f"开始处理大文件: {filepath}")    try:        with open(filepath, 'r', encoding='utf-8') as f:            for line in f: # 每次只读取一行                line_count += 1                char_count += len(line)                word_count += len(line.split()) # 简单统计单词                # 这里可以对每一行进行具体的处理,比如解析、过滤、写入到另一个文件等                if line_count % 100000 == 0: # 每处理10万行打印一次进度                    print(f"已处理 {line_count} 行...")        print(f"n文件处理完成。总行数: {line_count}, 总字数: {char_count}, 总词数: {word_count}")    except FileNotFoundError:        print(f"错误: 文件 '{filepath}' 不存在。")    except Exception as e:        print(f"处理文件时发生错误: {e}")# 示例:创建一个模拟的大文件# 注意:实际生成一个GB级别的文件可能需要一些时间# with open('large_data.txt', 'w', encoding='utf-8') as f:#     for i in range(5000000): # 500万行#         f.write(f"这是第 {i+1} 行数据,包含一些随机的文本内容,用于测试大文件处理。n")# print("模拟大文件 'large_data.txt' 创建完成。")# process_large_file('large_data.txt') # 实际运行时请取消注释

这种逐行读取的方式,内存占用非常小,因为它每次只在内存中保留一行数据。对于需要对文件内容进行复杂处理,但又不能一次性加载的情况,这无疑是最佳实践。

除了逐行读取,如果文件是结构化的,比如CSV或JSON,可以考虑使用相应的库(如

csv

模块、

json

模块)来流式解析,它们通常也提供了迭代器接口,避免一次性加载。

Python文件操作的常见陷阱与最佳实践:避免数据丢失和资源泄漏

文件操作看似简单,但实际开发中,一不小心就可能踩坑,导致数据丢失、程序崩溃,甚至系统资源耗尽。

忘记关闭文件句柄(或不使用

with

语句):这是最常见也最危险的错误。如果文件没有正确关闭,操作系统会一直认为这个文件被占用,可能导致其他程序无法访问,甚至文件损坏。在某些系统上,未关闭的文件句柄数量达到上限,程序会崩溃。

最佳实践始终使用

with open(...) as f:

语句。 它是Python处理文件I/O的黄金法则,能自动处理文件关闭,即使在读写过程中发生异常。

路径问题:相对路径与绝对路径的混淆:当你使用相对路径时,Python会相对于当前工作目录(current working directory)来查找文件。如果你从不同的位置运行脚本,或者脚本被其他程序调用,当前工作目录可能不是你预期的,导致

FileNotFoundError

最佳实践:对于脚本依赖的固定文件,考虑使用绝对路径,或者基于脚本文件自身的路径来构建路径。

os.path

模块是你的好帮手。

import os

获取当前脚本文件所在的目录

script_dir = os.path.dirname(os.path.abspath(file))

构建相对于脚本目录的文件路径

file_path = os.path.join(script_dir, ‘data’, ‘my_data.txt’)print(f”文件将查找或创建在: {file_path}”)

确保目录存在

os.makedirs(os.path.dirname(file_path), exist_ok=True)


权限问题:在尝试写入文件到受保护的目录(如

/root

C:Program Files

)时,如果没有足够的权限,会遇到

PermissionError

最佳实践:确保程序运行的用户有足够的权限去读写目标文件或目录。或者,将文件保存到用户有权限的目录,如用户的主目录、临时目录或程序数据目录。

编码不一致导致乱码:前面已经详细讨论过。

最佳实践:在

open()

函数中明确指定

encoding

参数,并尽量统一使用

'utf-8'

编码。

覆盖文件而非追加:不小心使用

'w'

模式打开一个已存在的文件,会清空原有内容,造成数据丢失。

最佳实践:在需要追加内容时,使用

'a'

模式。如果确实需要覆盖,确保这是你期望的行为,或者在覆盖前备份原文件。对于创建新文件,如果文件已存在则报错的场景,可以使用

'x'

模式。

这些看似细枝末节的地方,往往是导致程序不稳定、数据错误的关键。养成良好的文件操作习惯,能省去后期大量的调试时间。

以上就是Python怎样读写文本文件_Python文件读写技巧总结的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
python怎么读取txt文件_python文件读写步骤
上一篇 2025年12月14日 09:12:58
python怎么使用字典_python字典常用方法汇总
下一篇 2025年12月14日 09:13:14

相关推荐

  • 为什么某些外设需要安装特定驱动才能全功能使用?

    外设需专用驱动因通用驱动仅支持基础功能,无法解析厂商私有协议,导致高级特性如自定义按键、RGB灯效、DPI调节等无法使用,且性能优化不足,影响体验。 某些外设需要安装特定驱动才能全功能使用,核心原因在于操作系统自带的通用驱动只能提供最基础的“即插即用”功能,而外设制造商为了充分发挥其硬件的独特性能、…

    2026年9月23日
    000
  • Linux sudoers文件配置方法

    使用visudo编辑sudoers文件可安全配置用户权限,避免语法错误。通过用户、主机、命令别名简化管理,合理分配无需密码或特定命令权限,禁止赋予shell类命令无限制权限,并将规则写入/etc/sudoers.d/目录便于维护,配置后需测试并备份以防出错。 sudoers 文件用于配置 Linux…

    2026年9月23日
    100
  • 使用 PHP 解析 JSON 文件并在网页中显示特定数据

    本文档旨在指导初学者如何使用 PHP 解析 JSON 文件,并提取其中的特定数据,最终将其展示在网页上。我们将通过一个简单的例子,演示如何读取 JSON 文件,解码 JSON 数据,并使用 PHP 的数组操作和 HTML 元素将数据呈现出来。 读取 JSON 文件并解码 首先,我们需要准备一个 JS…

    2026年9月23日
    000
  • D盘和C盘有什么区别_D盘与C盘功能及用途对比解析

    C盘是系统核心,负责电脑启动和运行,存放操作系统及关键文件,需谨慎操作并预留至少20%空间;D盘为数据存储区,用于保存个人文件和软件,可自由管理但需定期整理与备份。 电脑里的C盘和D盘虽然都是用来存东西的,但它们的角色完全不同。简单说,C盘是系统的大本营,管着电脑能不能正常开机运行;D盘是你的私人仓…

    2026年9月23日
    000
  • linux .zip文件 解压缩命令的简单使用

    linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用

    大家好,很高兴再次与大家见面,我是你们的老朋友全栈君。 在Windows系统下,常见的压缩格式包括.zip和.rar。而在Linux系统下,常见的压缩格式则有.zip、.gz、.bz2、.tar.gz和.tar.bz2。今天,我将简要介绍一下Linux系统下.zip压缩命令的使用方法。 .zip的使…

    2026年9月23日 用户投稿
    300
  • win11怎么看电脑配置信息_win11查看电脑配置信息操作教程

    通过系统设置可快速查看处理器、内存等核心配置;使用“msinfo32”获取BIOS、主板等详细信息;运行“systeminfo”命令导出完整配置清单;借助设备管理器检查硬件设备及驱动状态。 如果您想了解自己电脑的硬件和系统详情,Windows 11 提供了多种内置方法来查看配置信息,无需安装额外软件…

    2026年9月23日
    000
  • VSCode如何通过AI优化内存使用 VSCode智能内存分析调试插件

    ai并不能直接优化vscode的内存占用,而是通过赋能智能化的内存分析调试插件,间接提升vscode的运行效率和开发体验;2. 这类插件通过采集堆快照、cpu性能数据、gc日志和扩展资源消耗等运行时信息,结合ai的模式识别与异常检测能力,精准识别内存泄漏、未清理的事件监听器、循环引用等问题;3. a…

    2026年9月23日
    200
  • win8系统要求最低配置_Win8最低系统要求

    win8系统要求最低配置_Win8最低系统要求win8系统要求最低配置_Win8最低系统要求win8系统要求最低配置_Win8最低系统要求win8系统要求最低配置_Win8最低系统要求

    如果您准备在电脑上安装Windows 8操作系统,但不确定硬件是否满足基本运行条件,则需要确认设备是否达到微软官方设定的最低配置标准。以下是确保系统可正常安装和启动的具体要求。 本文运行环境:Dell XPS 13,Windows 11 一、处理器(CPU)要求 Windows 8系统要求处理器主频…

    2026年9月23日 用户投稿
    000
  • VS Code算法实战:竞赛编程与调试环境搭建

    首先安装编程语言环境及VS Code扩展,如C/C++、Code Runner和LeetCode;接着配置Code Runner支持编译运行与输入重定向;最后通过代码片段提升编码速度,形成高效竞赛开发环境。 在竞赛编程中,高效的开发环境能大幅提升编码速度与调试效率。VS Code凭借轻量、可扩展和强…

    2026年9月23日
    000
  • 解决WordPress插件中$wpdb对象未初始化导致的数据库更新失败问题

    本文旨在解决wordpress插件开发中,使用`$wpdb`对象进行数据库更新时出现`call to a member function query() on null`错误。该错误通常是由于`$wpdb`对象未正确初始化所致。教程将详细解释错误原因,并提供通过引入`wp-config.php`文件…

    2026年9月23日
    100
  • win8任务计划程序怎么用_Win8任务计划程序使用教程

    win8任务计划程序怎么用_Win8任务计划程序使用教程win8任务计划程序怎么用_Win8任务计划程序使用教程win8任务计划程序怎么用_Win8任务计划程序使用教程win8任务计划程序怎么用_Win8任务计划程序使用教程

    答案:可通过任务计划程序实现。在Windows 8中,使用任务计划程序可创建基本或高级任务,设置触发器(如定时或开机启动)并指定操作(如运行程序、脚本或显示消息),通过向导或高级配置完成自动化。 如果您需要在Windows 8系统中自动执行特定程序、脚本或操作,可以通过任务计划程序来实现定时或触发式…

    2026年9月23日 用户投稿
    100
  • VSCode如何设置代码自动补全触发 VSCode智能提示触发条件的优化

    要解决vscode代码自动补全的触发、准确性、禁用和速度问题,需按以下步骤操作:1. 调整editor.quicksuggestions控制提示触发条件,如设置”other”: true, “comments”: false, “strin…

    2026年9月23日
    200
  • 在无Maven或Eclipse环境下手动构建Java Web应用WAR包的教程

    本教程详细介绍了如何在不依赖Maven或Eclipse等集成开发环境的情况下,为Java Web应用程序手动生成WAR(Web Application Archive)文件。文章首先阐述了WAR文件的基本结构,随后通过一个Ant构建脚本的实例,指导读者完成从源代码编译、文件组织到最终WAR包生成的全…

    2026年9月23日
    000
  • windows10怎么把任务栏设置成透明_windows10任务栏透明效果设置方法

    可通过系统设置、注册表或第三方工具实现Windows 10任务栏透明。一、在“个性化-颜色”中开启“透明效果”;二、在注册表新建TaskbarAcrylicOpacity值并设为0-100调节透明度,重启生效;三、使用TranslucentTB软件实现多模式透明控制,支持常透明或悬停显示。 如果您希…

    2026年9月23日
    000
  • 解决 Conda 环境中 Java 版本冲突的策略

    本文旨在解决 Conda 环境中 Java 版本激活不正确的问题。当用户尝试在 Conda 环境中指定特定 Java 版本(如 OpenJDK 8)时,系统可能仍激活旧的或错误的 Java 版本。教程将详细分析问题根源,并提供一种通过精确指定 Java 包名来确保 Conda 环境正确管理 Java…

    2026年9月23日
    000
  • Django 项目运行时遇到“django.core.exceptions.ImproperlyConfigured”错误,如何解决?

    当在运行 Django 项目时遇到“django.core.exceptions.ImproperlyConfigured”错误时,这表明 Django 无法导入其预期的数据库后端。 在给定的代码中,错误消息指出 Django 无法导入“django.db.backends.mysql”,这可能是因…

    2026年9月23日
    000
  • Windows安装过程中蓝屏INACCESSIBLE_BOOT_DEVICE怎么办?

    1、蓝屏“INACCESSIBLE_BOOT_DEVICE”通常因SATA模式不匹配或驱动缺失导致;2、进入BIOS将SATA模式从RAID改为AHCI可解决兼容性问题;3、安装时加载主板存储控制器驱动以识别NVMe或RAID磁盘;4、使用diskpart命令清理磁盘并转换为GPT(UEFI)或MB…

    2026年9月23日
    000
  • Linux安装Redis数据库,无需公网IP实现远程连接

    Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接

    redis作为一种高效的key-value数据库,因其将数据存储在内存中而具备极高的读写速度,广泛应用于多种场景中。以下将详细介绍如何在centos 8的linux虚拟机上搭建redis数据库,并利用cpolar实现内网穿透以便通过公网访问。 在Linux(CentOS 8)上安装Redis数据库 …

    2026年9月23日 用户投稿
    100
  • win7系统的hosts文件在哪,怎么修改hosts文件

    对于经常使用电脑的用户来说,hosts文件并不陌生。这个文件大小仅有1k左右,别看它体积小,功能却十分强大——可以用来绑定域名与ip地址、屏蔽特定网站或广告等。那么,这个重要的文件究竟藏在系统的哪个位置呢?接下来就跟着小编一起一探究竟。 hosts文件的位置: 通常情况下,hosts文件位于 C:W…

    2026年9月23日
    300
  • 谷歌为 Gemini CLI 带来扩展功能

    谷歌旗下的 AI 编程助手 Gemini CLI 最近推出了名为“扩展”的全新功能。官方表示,这一更新让用户能够“接入常用工具,并定制属于自己的 AI 命令行体验”。现在,任何开发者都可以发布扩展程序,无需经过谷歌的审核批准即可上线使用。 目前扩展库中已提供超过 50 款扩展,涵盖多种实用场景。例如…

    2026年9月23日
    000

发表回复

登录后才能评论
关注微信