python怎么读取txt文件_python文件读写步骤

Python读取txt文件需用open()函数配合with语句确保资源释放,推荐逐行迭代或分块读取大文件,并明确指定encoding解决编码问题。

python怎么读取txt文件_python文件读写步骤

Python读取txt文件主要依赖置的

open()

函数,它能打开文件并返回一个文件对象,接着可以使用文件对象的方法如

read()

readline()

readlines()

来获取内容。文件写入则通常使用

write()

方法,同时,为了确保文件资源被正确释放,无论读写,都强烈推荐使用

with

语句。

解决方案

在Python中进行文件读写,核心在于

open()

函数和文件对象的操作。以下是具体的步骤和常用方法:

1. 打开文件:使用

open()

函数来打开一个文件。它至少需要一个参数:文件路径(包含文件名)。通常还会指定第二个参数:文件模式(’r’表示读,’w’表示写,’a’表示追加)。更重要的是,要考虑编码,尤其是处理包含非ASCII字符的文本文件时,指定

encoding='utf-8'

是一个非常好的习惯,能避免很多乱码问题。

# 读取模式# 'r' - 只读(默认模式),文件不存在会报错# 'w' - 只写,如果文件存在会清空内容,不存在则创建新文件# 'a' - 追加模式,如果文件存在,新内容会添加到文件末尾,不存在则创建新文件# 'r+' - 读写模式,文件指针在开头# 'w+' - 读写模式,清空文件内容或创建新文件# 'a+' - 读写模式,文件指针在末尾(写入时),读取时在开头

2. 读取文件内容:一旦文件被打开,你就可以使用文件对象提供的方法来读取数据。

read()

: 读取整个文件内容,并将其作为单个字符串返回。

with open('example.txt', 'r', encoding='utf-8') as f:    content = f.read()    print(content)

readline()

: 读取文件中的一行内容,包括行尾的换行符。每次调用都会读取下一行。

with open('example.txt', 'r', encoding='utf-8') as f:    first_line = f.readline()    second_line = f.readline()    print(f"第一行: {first_line.strip()}") # .strip()去除换行符    print(f"第二行: {second_line.strip()}")

readlines()

: 读取所有行,并将它们作为一个字符串列表返回,列表中的每个元素都是文件中的一行(包含换行符)。

with open('example.txt', 'r', encoding='utf-8') as f:    lines = f.readlines()    for line in lines:        print(line.strip())

按行迭代(推荐): 对于大文件,直接迭代文件对象是最高效的方式,因为它不会一次性将所有内容加载到内存中。

with open('example.txt', 'r', encoding='utf-8') as f:    for line in f:        print(line.strip())

3. 写入文件内容:使用

write()

方法将字符串写入文件。

write(string)

: 将指定的字符串写入文件。请注意,

write()

不会自动添加换行符,你需要手动添加

n

# 写入新内容(会覆盖旧内容)with open('output.txt', 'w', encoding='utf-8') as f:    f.write("这是第一行内容。n")    f.write("这是第二行内容。n")# 追加内容with open('output.txt', 'a', encoding='utf-8') as f:    f.write("这是追加的第三行。n")

4. 错误处理:文件操作时可能会遇到

FileNotFoundError

PermissionError

等异常。使用

try...except

块可以更好地处理这些情况。

try:    with open('non_existent_file.txt', 'r', encoding='utf-8') as f:        content = f.read()        print(content)except FileNotFoundError:    print("错误:文件不存在,请检查路径。")except Exception as e:    print(f"发生了一个未知错误: {e}")

Python文件读取时,编码问题怎么解决?

编码问题,说实话,是我在Python文件操作中遇到最多的“拦路虎”之一。你兴冲冲地写好代码,运行,结果屏幕上跳出一堆乱码,或者更糟,直接一个

UnicodeDecodeError

,那一瞬间的挫败感,我相信很多开发者都深有体会。

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

解决这个问题,核心思想就是明确地告诉Python你正在处理的文件是什么编码格式。默认情况下,Python 3在打开文件时会尝试使用系统的默认编码(比如在Windows上可能是GBK,在Linux上通常是UTF-8),但如果文件实际编码与系统默认不符,问题就来了。

最直接、最推荐的做法是:

open()

函数中明确指定

encoding

参数

# 假设你的文件是UTF-8编码with open('my_document.txt', 'r', encoding='utf-8') as f:    content = f.read()    print(content)# 如果你知道文件是GBK编码(中文Windows系统常见)with open('legacy_file.txt', 'r', encoding='gbk') as f:    content = f.read()    print(content)# 甚至是一些比较少见的,比如Latin-1with open('iso_file.txt', 'r', encoding='latin-1') as f:    content = f.read()    print(content)

当你遇到

UnicodeDecodeError

时,错误信息通常会提示在哪一行、哪个字节发生了问题。这给了我们排查的方向。通常,你需要:

确认文件实际编码:这可能是最难的一步。你可以尝试用文本编辑器(如Notepad++、VS Code)打开文件,这些编辑器通常能自动检测或允许你手动查看/更改文件的编码。尝试常见的编码:如果无法确定,可以先尝试

utf-8

,然后是

gbk

(针对中文环境),或者

latin-1

(针对一些西欧语言)。万不得已的“暴力”方法(不推荐,但有时有用)

errors

参数。在

open()

函数中,除了

encoding

,还有一个

errors

参数。它可以指定当编码解码失败时如何处理。

errors='ignore'

:忽略无法解码的字符。这会导致数据丢失,但至少程序不会崩溃。

errors='replace'

:用一个特殊的替换字符(通常是

?

)代替无法解码的字符。

# 慎用!这会丢失信息with open('problem_file.txt', 'r', encoding='utf-8', errors='ignore') as f:content = f.read()print(content)

这种方法虽然能让程序跑起来,但你得到的数据可能是不完整的或有偏差的,所以只应作为最后的手段,并且要清楚其副作用。我的建议是,从源头解决编码问题,确保文件以正确的编码保存,或者在读取时使用正确的编码参数。

Python文件读写操作中,

with

语句为什么如此重要?

with

语句在Python的文件操作中,几乎可以说是“标配”了。如果你看到一个Python文件操作的代码没有用

with

,那多半是初学者,或者在一些非常特殊的场景下。它的重要性,主要体现在资源管理代码健壮性上。

想象一下,你打开了一扇门(文件),进去拿东西。拿完东西后,你是不是应该把门关上?如果忘了关,这扇门就一直开着,别人可能进不来,或者风雨会进来。文件也是一样,当你用

open()

函数打开一个文件后,操作系统会为这个文件分配一些资源(比如文件句柄)。如果程序在完成操作后没有显式地调用

f.close()

来关闭文件,这些资源就可能一直被占用着,直到程序结束,甚至更久。

这就可能导致一系列问题:

资源泄露:打开的文件句柄过多,可能耗尽操作系统资源,导致后续文件操作失败。数据损坏或丢失:如果文件没有被正确关闭,写入的数据可能没有完全刷新到磁盘,导致数据不完整。文件锁定:在某些操作系统上,未关闭的文件可能会被锁定,阻止其他程序或用户访问或修改。

with

语句,正是为了解决这些问题而生的。它背后利用了Python的上下文管理器协议(context manager protocol)。当

with

语句块开始执行时,它会自动调用文件对象的

__enter__

方法;当

with

语句块执行结束(无论是正常结束,还是因为异常退出),它都会自动调用文件对象的

__exit__

方法。而

__exit__

方法的核心工作,就是确保文件被安全地关闭

这意味着,无论你的代码在

with

块内部是顺利执行完毕,还是在某个地方抛出了异常,Python都会保证文件句柄会被释放,文件会被关闭。你不再需要手动地在

try...finally

块中去调用

f.close()

,代码会变得更简洁、更安全。

# 没有使用with语句的写法(不推荐)f = open('data.txt', 'r', encoding='utf-8')try:    content = f.read()    print(content)except Exception as e:    print(f"处理文件时出错: {e}")finally:    f.close() # 必须手动关闭# 使用with语句的写法(推荐)with open('data.txt', 'r', encoding='utf-8') as f:    content = f.read()    print(content)# 文件在with块结束时自动关闭,即使有异常

很明显,

with

语句让代码更清晰,减少了出错的可能性,也让开发者能更专注于业务逻辑,而不是繁琐的资源管理。这正是它如此重要的原因。

Python处理大文件时,有哪些高效的读取策略?

处理大文件,比如几个GB甚至几十GB的日志文件或数据集,如果直接用

f.read()

f.readlines()

一次性把所有内容加载到内存,那几乎肯定会遇到

MemoryError

,或者导致系统卡顿。这时候,我们需要更“聪明”的策略,也就是那些按需读取分块处理的方法。

1. 逐行迭代(Line-by-Line Iteration)

这是处理文本大文件最常用、最有效的方式之一。Python的文件对象本身就是可迭代的。当你直接在

for

循环中迭代文件对象时,它会一行一行地读取文件内容,每次只将一行数据加载到内存中。

def process_large_text_file_line_by_line(filepath):    line_count = 0    with open(filepath, 'r', encoding='utf-8') as f:        for line in f:            # 在这里处理每一行数据            # 比如:解析JSON、过滤特定内容、统计词频等            # print(line.strip()) # 打印时去除换行符            line_count += 1            if line_count % 100000 == 0:                print(f"已处理 {line_count} 行...")    print(f"文件处理完毕,总行数: {line_count}")# 示例调用# process_large_text_file_line_by_line('large_log.txt')

这种方法内存占用极低,因为它一次只处理一行,非常适合日志文件分析、数据清洗等场景。

2. 分块读取(Reading in Chunks)

对于二进制文件或者那些不以行划分的文本文件(比如巨大的XML、CSV文件,你可能想一次读取固定大小的数据块),

f.read(size)

方法就派上用场了。你可以指定每次读取的字节数(

size

),然后在一个循环中不断读取,直到文件末尾。

def process_large_binary_file_in_chunks(filepath, chunk_size=4096): # 默认4KB    total_bytes_read = 0    with open(filepath, 'rb') as f: # 注意这里是'rb',读取二进制        while True:            chunk = f.read(chunk_size)            if not chunk: # 读取到空块,表示文件已读完                break            # 在这里处理数据块            # 比如:计算哈希值、查找特定字节序列、传输数据块等            # print(f"读取了 {len(chunk)} 字节的块")            total_bytes_read += len(chunk)            if total_bytes_read % (1024 * 1024 * 100) == 0: # 每100MB打印一次                print(f"已处理 {total_bytes_read / (1024 * 1024):.2f} MB...")    print(f"文件处理完毕,总字节数: {total_bytes_read}")# 示例调用# process_large_binary_file_in_chunks('large_data.bin')

这种方式对于处理图像、视频、归档文件等二进制数据非常有效。

chunk_size

的选择取决于你的内存和处理需求,通常选择几KB到几MB。

3. 使用

mmap

模块(Memory-Mapped Files)

对于非常非常大的文件,如果你的操作系统支持内存映射文件(大多数现代操作系统都支持),Python的

mmap

模块可以提供一种更高级的解决方案。它将文件的一部分或全部内容映射到进程的虚拟内存空间中,这样你就可以像访问内存数组一样访问文件内容,而不需要实际将整个文件加载到物理内存。操作系统会负责按需从磁盘加载数据。

import mmapimport osdef search_in_large_file_with_mmap(filepath, search_term):    if not os.path.exists(filepath):        print(f"文件 {filepath} 不存在。")        return False    with open(filepath, 'r+b') as f: # 'r+b' 读写二进制模式        # 使用mmap.mmap创建内存映射        # length=0表示映射整个文件        mm = mmap.mmap(f.fileno(), 0)        try:            # 在映射的内存中查找字节序列            # 注意:search_term也需要是字节串            if mm.find(search_term.encode('utf-8')) != -1:                print(f"找到了 '{search_term}'。")                return True            else:                print(f"未找到 '{search_term}'。")                return False        finally:            mm.close() # 务必关闭mmap对象# 示例调用# with open('large_text_for_mmap.txt', 'w', encoding='utf-8') as f:#     f.write("This is a very long file with some important text inside it." * 100000)# search_in_large_file_with_mmap('large_text_for_mmap.txt', 'important text')
mmap

特别适合需要随机访问文件内容或者在文件中进行复杂搜索的场景,因为它避免了频繁的磁盘I/O操作,直接通过内存地址访问数据。然而,它的使用相对复杂一些,且主要用于二进制模式。

选择哪种策略,取决于你的文件类型、文件大小以及你想要对数据进行的操作。对于大多数文本大文件,逐行迭代通常是最佳选择,兼顾了简单性和效率。

以上就是python怎么读取txt文件_python文件读写步骤的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用 Numba 加速 Python 中的嵌套循环
上一篇 2025年12月14日 09:12:52
Python怎样读写文本文件_Python文件读写技巧总结
下一篇 2025年12月14日 09:13:08

相关推荐

  • ​​VSCode的进阶玩法!这些快捷键组合让你秒变编程大神​​

    要高效利用vscode进行代码导航,1. 使用ctrl + p / cmd + p快速打开文件;2. 使用ctrl + shift + o / cmd + shift + o定位文件中的符号;3. 使用ctrl + – / cmd + -后退,ctrl + shift + –…

    2026年9月24日
    700
  • 智能平权下,燃油车如何升级?

    智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?

    曾几何时,“智能驾驶是电动车的专属”成为汽车行业的共识。宝马、奔驰、奥迪等传统豪华品牌长期专注于机械精密性和驾驶质感,在智能化布局上尤为谨慎,一度被贴上保守与落后的标签。 与此同时,新能源品牌凭借智能化迅速打开市场缺口,成功构建起“电动即智能、燃油即传统”的认知框架,在舆论和市场销量中占据先机。 ☞…

    2026年9月24日 用户投稿
    000
  • WPS怎么办批量打印文件_WPS多文档批量打印与队列管理步骤

    使用WPS内置批量打印功能,通过工具→批量处理→批量打印添加文件并设置参数后一键打印;2. 在资源管理器中多选文件右键以WPS打开,再在文件菜单中选择打印所有文档;3. 通过控制面板的设备和打印机进入打印队列,可实时监控、暂停或取消任务,确保批量打印过程稳定可控。 如果您需要在短时间内处理多个WPS…

    2026年9月24日
    400
  • Intel OpenCAS缓存加速方案

    open cas 架构概览:数据从hdd盘读取后被复制到open cas的缓存中,后续的读取操作从内存中进行,从而提高读写效率。在write-through模式下,所有数据同步刷新到open cas的ssd和后端的hdd中。在write-back模式下,数据同步写入到open cas的ssd中,然后…

    2026年9月24日
    400
  • windows8如何取消开机密码_windows8取消开机密码的操作

    1、通过netplwiz取消密码验证并设置自动登录;2、在控制面板中更改密码为空实现无密码开机;3、使用命令提示符执行net user命令清除账户密码,三者均可实现Windows 8.1启动时跳过密码输入。 如果您希望在启动Windows 8系统时跳过手动输入密码的步骤,可以直接通过系统内置工具配置…

    2026年9月24日
    000
  • 赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会

    赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会

    8 月 26 日,中国电子、嵌入式及半导体先进封测行业的风向标 ——elexcon2025 深圳国际电子展暨嵌入式展盛大开幕。作为本届展会的重磅环节之一,国产存储领军品牌康盈半导体携新而来,以 “小而不凡,速启 ai 未来” 为核心主题,正式发布 2025 年存储新品,同步拉开面向 ai 终端应用的…

    2026年9月24日 用户投稿
    000
  • 数据实时迁移同步工具 CloudCanal v5.2.0.0 发布,支持 SaaS 全托管

    cloudcanal 免费社区版 是 clougence 公司推出的一款全自研、可视化、自动化数据迁移同步工具,具备 结构迁移、数据迁移、数据同步、数据校验、数据订正 等功能,支持 60+ 款流行关系型数据库、实时数仓、消息中间件、缓存数据库和搜索引擎之间数据互通,其中包含国产数据库 oceanba…

    2026年9月24日
    000
  • VSCode如何实现AI代码反混淆 VSCode智能分析混淆代码的技巧

    vscode没有一键ai反混淆功能,但可通过智能扩展、调试器、ast查看器、代码格式化工具及外部ai工具集成来辅助分析和逐步还原混淆代码;2. 利用eslint、prettier等扩展提升代码可读性,通过“重命名符号”“转到定义”“查找引用”等功能追踪变量和函数流向,结合多光标编辑和代码片段进行手动…

    2026年9月24日
    100
  • 电脑网络连接限制为100Mbps怎么办_网速被限制的解决方法

    首先确认网卡是否支持千兆速率,进入设备管理器查看网络适配器型号并核实规格;接着在网卡属性中将“速度和双工”设置为1.0 Gbps全双工或自动协商;更换符合Cat 5e及以上标准的网线,确保物理连接可靠;检查路由器或交换机端口设置,确保未强制限制为100Mbps;更新或重装网卡驱动程序至最新版本;最后…

    2026年9月24日
    100
  • 如何通过日志排查权限问题

    排查权限问题需从日志入手,重点分析时间、用户、资源路径、拒绝原因及调用堆栈。首先检查应用日志中“用户无权访问”等提示,结合Web服务器日志中的403/401状态码定位请求异常;再查看操作系统日志如/var/log/secure中SSH或sudo拒绝记录,确认系统级权限问题;同时审查中间件如Sprin…

    2026年9月24日
    100
  • win10软件不兼容怎么办_win10软件兼容性处理方法

    首先使用兼容性疑难解答工具检测并修复问题,若无效则手动设置兼容模式为Windows 7或8,同时安装必要的Visual C++和.NET运行库,更新显卡等驱动程序,并尝试以管理员身份运行程序。 如果您尝试在Windows 10系统上运行某个软件,但出现“此应用无法在你的电脑上运行”或程序闪退等错误提…

    2026年9月24日
    000
  • hive安装配置实验

    一、安装前的准备工作 1. 配置并安装hadoop,请参考链接http://blog.csdn.net/wzy0623/article/details/50681554。 2. 下载以下安装包:mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz、apache-hive…

    2026年9月24日
    600
  • VSCode 怎样配置终端默认路径 VSCode 终端默认路径的配置技巧​

    在 vscode 中配置终端默认启动路径需修改 terminal.integrated.cwd 设置项;2. 可通过用户设置(全局生效)或工作区设置(项目专属)进行配置,优先级为工作区设置覆盖用户设置;3. 路径可使用绝对路径或相对路径(推荐相对路径以提升协作性),windows 系统需注意反斜杠转…

    2026年9月24日
    000
  • iSlide预览功能如何开启_iSlide预览功能开启的完整指南

    首先确认iSlide插件已正确安装并显示在PowerPoint功能区,若未显示需重新安装;接着进入“iSlide”选项卡,使用“资源库”中主题或图表分类,将鼠标悬停于缩略图以触发预览;如无反应,检查是否已登录账户且网络畅通,避免防火墙限制;随后更新iSlide至最新版本,卸载旧版后从官网下载安装,并…

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

    本文旨在帮助开发者学习如何使用 PHP 解析 JSON 文件,并提取其中的特定数据,将其以结构化的方式展示在网页上。我们将通过一个简单的示例,演示如何读取 JSON 数据,解析成 PHP 数组,并最终以 HTML 表格的形式呈现。 PHP 解析 JSON 数据 JSON (JavaScript Ob…

    2026年9月24日
    100
  • OriginOS 6 深度体验:当操作系统回归「体验为王」

    OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」

    2020 年,智能手机刚刚进入 5g 普及阶段,手机的硬件与软件都迎来了一次迭代浪潮——新形态的需求对操作系统的设计与交互都提出了诸多新的问题,originos 的首个版本,可以看作 vivo对这些问题的回答。 彼时,我曾有机会与 OriginOS 开发团队沟通,正如 OriginOS 的中文名原 …

    2026年9月24日 用户投稿
    100
  • 《Python完全自学教程》免费在线连载1.5

    《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5

    说明: 本节内容,是针对非计算机专业的读者提供的补充知识。 1.5 操作系统 本节不是全面介绍操作系统知识,是提醒读者从开发者的角度认识自己的操作系统——根据多年的经验,至少要能熟练使用一些命令完成常见操作。 首先要声明硬件设备,本书所演示的代码都是基于个人计算机( Personal Compute…

    2026年9月24日 用户投稿
    700
  • 探索VSCode Jupyter Notebook集成与扩展

    VSCode集成Jupyter Notebook提升开发效率,安装Jupyter扩展后可直接运行.ipynb文件,支持内核选择、Shift+Enter执行单元格、图表渲染及变量状态保留;结合Python扩展、Pylance、GitLens等工具,实现调试、智能提示、版本控制与代码转换,适合数据分析与…

    2026年9月24日
    000
  • Linux用户adduser与useradd命令区别

    adduser是交互式脚本,默认创建家目录并设密码,适用于Debian/Ubuntu;2. useradd是底层命令,需手动加参数创建家目录和Shell,通用性强,适合脚本使用。 在Linux系统中,adduser 和 useradd 都可以用来创建新用户,但它们在实现方式、使用习惯和功能上存在明显…

    2026年9月24日
    000
  • 迅雷浏览器怎么开启深色模式_迅雷浏览器夜间模式设置

    开启迅雷浏览器深色模式可减少夜间用眼疲劳,具体方法包括:一、通过浏览器菜单进入设置,选择外观中的深色或夜间主题,或开启“跟随系统”选项实现自动切换;二、在操作系统中启用深色模式(Windows路径为“设置>个性化>颜色”,macOS为“系统设置>通用>外观”),并确保浏览器版本最新以兼容显示;三、若…

    2026年9月24日
    100

发表回复

登录后才能评论
关注微信