Python怎么读取txt?一篇详细教程,教你轻松掌握文本文件读取技巧,附带实用示例!
要说 Python怎么读取txt 文件,这可真是基础中的基础了。但别以为基础就简单,里面门道可不少,尤其是在面对各种奇奇怪怪的编码、超大的文件的时候。今天,咱们就来好好聊聊 Python读取txt 文件的那些事儿。
我第一次接触 Python读取txt 文件,还是帮我爸整理他那些乱七八糟的股票数据。那时候,满眼都是数字和表格,头都大了。不过,也是那时候,我才真正体会到 Python 的强大,几行代码就能搞定,简直是效率神器。
最简单的,当然是用 open()
函数。这就像打开一扇门,通往 txt 文件的世界:
“`python
file = open(“myfile.txt”, “r”) # 以只读模式打开文件
content = file.read() # 读取整个文件内容
file.close() # 记得关闭文件,释放资源
print(content)
“`
这段代码,简洁明了,对吧?但是,问题也来了。如果文件太大,比如几百兆甚至几个G,一下子全部读到内存里,电脑分分钟卡死给你看。所以,更好的办法是逐行读取:
python
file = open("myfile.txt", "r")
for line in file:
print(line.strip()) # 处理每一行数据,strip() 去掉行尾的换行符
file.close()
这样,一次只读取一行,内存压力小多了。就像吃自助餐,细嚼慢咽,慢慢来。
但是!人生处处有惊喜(或者说是惊吓)。你有没有遇到过这样的情况:txt 文件里的中文显示乱码? 这就是编码的问题了。 Python 默认的编码方式可能和 txt 文件的编码方式不一致,导致无法正确解码。
解决方法也很简单,在 open()
函数里指定编码方式:
python
file = open("myfile.txt", "r", encoding="utf-8") # 指定编码为utf-8
for line in file:
print(line.strip())
file.close()
常见的编码方式有 utf-8
、gbk
、gb2312
等。如果不知道 txt 文件的编码方式,可以尝试用不同的编码方式打开,看看哪个能正常显示中文。
说到这里,不得不提一下 with
语句。这玩意儿,简直是优雅的化身:
python
with open("myfile.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())
用了 with
语句,就不用手动 close()
文件了。当 with
语句块执行完毕后,Python 会自动关闭文件,省心省力。
除了 read()
和逐行读取,Python 还提供了 readlines()
方法,可以一次性把所有行读取到一个列表中:
“`python
file = open(“myfile.txt”, “r”, encoding=”utf-8″)
lines = file.readlines() # 读取所有行到列表中
file.close()
for line in lines:
print(line.strip())
“`
这种方法,适合处理小型 txt 文件。如果文件太大,还是建议逐行读取。
除了简单的读取,有时候我们还需要对 txt 文件进行一些处理,比如过滤掉空行、注释行:
python
with open("myfile.txt", "r", encoding="utf-8") as file:
for line in file:
line = line.strip() # 去掉行首尾的空格
if not line: # 如果是空行,跳过
continue
if line.startswith("#"): # 如果是注释行,跳过
continue
print(line) # 处理有效数据
这段代码,就过滤掉了空行和以 #
开头的注释行。
还有一种情况,就是 txt 文件是用逗号、空格或其他分隔符分隔的数据。这时候,可以用 split()
方法来分割每一行的数据:
python
with open("data.txt", "r", encoding="utf-8") as file:
for line in file:
data = line.strip().split(",") # 用逗号分割每一行的数据
print(data) # 处理分割后的数据
这段代码,用逗号分割每一行的数据,并把分割后的数据打印出来。
当然,如果你的 txt 文件是标准的 CSV 格式,也可以用 csv
模块来读取:
“`python
import csv
with open(“data.csv”, “r”, encoding=”utf-8″) as file:
reader = csv.reader(file)
for row in reader:
print(row)
“`
csv
模块,专门用来处理 CSV 格式的文件,功能强大,使用方便。
我记得有一次,需要处理一个超大的日志文件,几百G的那种。用普通的 Python读取txt 方法,根本跑不动。后来,我找到了一个好东西:mmap
模块。
mmap
模块,可以将文件映射到内存中,像操作内存一样操作文件。这样,就可以处理超大的文件了。
“`python
import mmap
with open(“large_file.txt”, “r”, encoding=”utf-8″) as file:
with mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as mm:
for line in iter(mm.readline, b””):
line = line.decode(“utf-8”).strip()
print(line)
“`
这段代码,用 mmap
模块将文件映射到内存中,然后逐行读取。速度飞快,简直是处理大型文件的利器。
总结一下,Python读取txt 文件的方法有很多种,选择哪种方法,取决于你的具体需求。 如果是小型文件,可以用 read()
、readlines()
或者逐行读取。 如果是大型文件,可以用 mmap
模块。 如果文件是 CSV 格式,可以用 csv
模块。 别忘了处理编码问题,以及过滤掉不需要的行。 掌握了这些技巧,Python读取txt 文件,就再也不是什么难题了。 你说对吧?