📅  最后修改于: 2023-12-03 15:24:35.853000             🧑  作者: Mango
在Python编程中,我们经常需要读取大文本文件,因为很多时候,文本文件的大小会超过内存的限制,这时我们就需要使用一些特殊的方法来读取文件。
使用Python内置的open()
函数打开文本文件,然后使用readline()
方法逐行读取文件。这种方法不适用于非常大的文件,因为它只能一次读取一行,速度很慢,而且占用内存量大。
with open('big_file.txt', 'r') as f:
line = f.readline()
while line:
# 处理该行文本
line = f.readline()
使用Python的yield关键字,可以将逐行读取文本的逻辑封装为一个生成器函数,每次只读取一行。
def read_text(file_path):
with open(file_path, 'r') as f:
for line in f:
yield line
# 使用示例
for line in read_text('big_file.txt'):
# 处理该行文本
使用yield生成器的好处是,它不会一次性将文件全部读入内存,而是逐行读取。这样,我们就能够读取任意大小的文本文件,而不会导致内存溢出的错误。
当处理的文件是CSV格式时,我们可以使用pandas库来读取文件,这个库可以将读取到的CSV文件转换成一个DataFrame对象,并进行灵活的数据分析和处理。
import pandas as pd
df = pd.read_csv('big_file.csv', iterator=True, chunksize=1000)
for chunk in df:
# 处理该块数据
在这里,我们使用read_csv()
函数并传递iterator=True
和chunksize
参数,这样就可以将CSV文件分块加载进内存,从而避免将全部数据读入内存。我们可以在for循环中逐块处理CSV文件中的数据。
当我们只需要读取文本文件中的特定一行或几行时,我们可以使用linecache库来读取这些行。
import linecache
line = linecache.getline('big_file.txt', 10) # 读取第10行
使用linecache库的好处是,它只读取我们需要的行,而不需要一次性读取整个文件,从而避免了内存溢出的问题。
参考文献: