5种Python逐行读取文件的方式

在本文中,我们将讨论在Python中逐行读取文件的不同方法。

假设我们在与python脚本相同的目录中有一个data.txt文件。让我们看看如何逐行阅读其内容。

小型文件的解决方案:使用readlines()获取文件中所有行的列表

第一个基本且效率低下的解决方案是使用 readlines() 函数。

如果我们有一个小文件,则可以在文件处理程序上调用readlines(),它将整个文件内容读取到内存中,然后将其拆分为单独的行,并返回文件中所有行的列表。除最后一行外,列表中的所有行将在末尾包含换行符。
例如,

# Open file    
fileHandler  =  open  ("data.txt",  "r")
# Get list of all lines in file
listOfLines  =  fileHandler.readlines()
# Close file
fileHandler.close()

它将返回文件中的行列表。我们可以遍历该列表,并剥离()新行字符,然后打印该行,即

# Iterate over the lines
for  line in  listOfLines:
	print(line.strip())

输出:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
Hello
This is  a  sample
file that contains is
some text
is
like  123

但是,如果文件很大,则会消耗大量内存,因此,如果文件很大,最好避免使用此解决方案。

让我们看一些有效的解决方案,

使用readline()逐行读取文件

读取大文件时,有效的方法是逐行读取文件,而不是一次性读取所有数据。
让我们将readline()函数与文件处理程序一起使用,即

lineStr  =  fileHandler.readline()

readline()返回文件中的下一行,该行的末尾将包含换行符。另外,如果到达文件末尾,则它将返回一个空字符串。
现在让我们看看如何使用readline()逐行读取文件内容

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# Open file        

fileHandler  =  open  ("data.txt",  "r")
while  True:
    # Get next line from file
    line  =  fileHandler.readline()
    # If line is empty then end of file reached
    if  not  line  :
        break;
    print(line.strip())
    # Close Close    
fileHandler.close()

输出:

Hello
This is  a  sample
file that contains is
some text
is
like  123

使用上下文管理器逐行读取文件(带块)

当我们打开文件时,我们也需要关闭它。如果我们忘记关闭,那么它将在例如对函数结尾处的文件引用的最后一个引用被破坏时自动关闭。但是,即使文件相关的工作已经完成,如果我们有一个大型功能不会很快结束该怎么办。在这种情况下,我们可以使用上下文管理器自动清除诸如文件关闭之类的内容。
例如,

Hello
This is  a  sample
file that contains is
some text
is
like  123

在这种情况下,当控制脱离块时,文件将自动关闭。即使由于某些异常而出现阻塞。

使用上下文管理器(带块)获取文件中的行列表

让我们遍历文件中的所有行并创建行列表,即

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# Get the all the lines in file in a list

listOfLines  =  list()
with  open  ("data.txt",  "r")  as  myfile:
    for  line in  myfile:
        listOfLines.append(line.strip())

listOfLines列表的内容为

['Hello',  'This is a sample',  'file that contains is',  'some text',  'is',  '',  'like 123']

使用上下文管理器和while循环逐行读取文件的内容

让我们使用上下文管理器和while循环遍历文件中的各行,即

# Open file

with  open("data.txt",  "r")  as  fileHandler:
    # Read next line
    line  =  fileHandler.readline()
    # check line is not empty
    while  line:
         print(line.strip())
         line  =  fileHandler.readline()

列表的内容将是

Hello
This is  a  sample
file that contains is
some text
is
like  123

完整的示例如下,

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def main():
    print("****Read all lines in file using readlines() *****")
    # Open file
    fileHandler = open("data.txt", "r")
    # Get list of all lines in file
    listOfLines = fileHandler.readlines()
    # Close file
    fileHandler.close()
    # Iterate over the lines
    for line in listOfLines:
        print(line.strip())
    print("****Read file line by line and then close it manualy *****")
    # Open file
    fileHandler = open("data.txt", "r")
    while True:
    # Get next line from file
        line = fileHandler.readline()
        # If line is empty then end of file reached
        if not line:
            break;
        print(line.strip())
    # Close Close
    fileHandler.close()
    print("****Read file line by line using with open() *****")
    # Open file
    with open("data.txt", "r") as fileHandler:
        # Read each line in loop
        for line in fileHandler:
            # As each line (except last one) will contain new line character, so strip that
            print(line.strip())
    print("****Read file line by line using with open *****")
    # Get the all the lines in file in a list
    listOfLines = list()
    with open("data.txt", "r") as myfile:
        for line in myfile:
            listOfLines.append(line.strip())
    print(listOfLines)
    print("****Read file line by line using with open() and while loop *****")
    # Open file
    with open("data.txt", "r") as fileHandler:
        # Read next line
        line = fileHandler.readline()
        # check line is not empty
        while line:
            print(line.strip())
            line = fileHandler.readline()


if __name__ == '__main__':
    main()

输出:

****Read all lines in file using readlines() *****
Hello
This is a sample
file that contains is
some text
is
 
like 123
****Read file line by line and then close it manualy *****
Hello
This is a sample
file that contains is
some text
is
 
like 123
****Read file line by line using with open() *****
Hello
This is a sample
file that contains is
some text
is
 
like 123
****Read file line by line using with open *****
['Hello', 'This is a sample', 'file that contains is', 'some text', 'is', '', 'like 123']
****Read file line by line using with open() and while loop *****
Hello
This is a sample
file that contains is
some text
is
 
like 123

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web

<think>嗯,用户现在想了解Python逐行读取文件内容的三种方法。根据之前的引用内容,我需要整理出不同的方法并分析它们的优缺点和适用场景。首先,我需要回忆一下用户提供的引用材料里的信息。 引用[1]里提到了四种方法:readline、readlines一次读取多行、直接for循环和使用fileinput模块。用户现在问的是三种方法,可能需要从中挑选最常用的三种,或者合并类似的方法。比如,readline和readlines虽然都是文件对象的方法,但使用方式不同,可以算作两种不同的方法。第三种可能是直接使用for循环,而fileinput模块可能作为补充或者第四种方法。 所以,可能需要把方法一(readline)、方法三(直接for循环)和方法二(readlines)作为三种主要方法。但用户要求三种,可能需要排除fileinput或者将其作为额外补充。不过根据用户的问题,可能需要明确回答三种,所以选择前三种比较合适。 接下来,需要确认每种方法的代码示例和优缺点。例如,readline逐行读取,节省内存但速度较慢;readlines一次读取多行,可以调整参数,提升速度但内存占用稍大;直接for循环简洁方便,自动逐行处理。这些都需要在回答中说明。 还要注意用户提到的Python版本问题,比如print语句在Python2和3中的区别,但用户可能需要的是Python3的示例,所以代码需要调整成Python3的格式,比如print(line, end='')而不是带逗号的用法。 另外,用户希望回答结构清晰,逐步解决问题,所以需要分点列出每种方法,给出代码示例,然后说明优缺点和应用场景。这样用户能一目了然,选择适合自己需求的方法。 可能还需要检查是否有遗漏的方法,比如是否还有其他逐行读取方式。根据已有的知识,除了上述三种,还有使用生成器或者with语句结合循环,但用户引用的材料里已经涵盖了主要方法,所以不需要额外添加。 最后,生成的相关问题需要考虑用户可能进一步的需求,比如大文件处理时的优化,不同场景下的选择建议,或者性能对比。这样能帮助用户深入理解不同方法的适用情况。 总结下来,回答的结构应该是: 1. 方法一:readline函数,代码示例,优缺点。 2. 方法二:一次性读取多行(readlines),代码示例,优缺点。 3. 方法三:直接for循环,代码示例,优缺点。 4. 可能补充其他方法(如fileinput),但用户要求三种,所以可能放在相关问题里。 确保代码块正确,使用中文解释,符合LaTeX格式要求,比如行内公式用$...$。不过在这个问题中可能用不上数学公式,但需要检查是否有需要格式化的部分。 现在开始组织语言,确保每个部分清晰,并自然引用提供的参考文献,比如在优缺点部分提到引用中的内容。例如,在readline方法中提到优点节省内存,来自引用[1]和[2]。 最后,生成相关问题,如处理大文件的建议、性能优化、不同场景选择等,帮助用户进一步探索。</think>在Python逐行读取文件内容主要有以下三种常用方法,其代码实现、优缺点及适用场景如下: ### 一、使用 `readline()` 逐行读取 ```python with open('file.txt', 'r') as f: while True: line = f.readline() if not line: break print(line, end='') # Python 3中避免自动换行 ``` - **优点**:内存效率高,适合处理超大文件(如日志文件),每次仅加载一行到内存[^1][^2]。 - **缺点**:速度较慢,需手动控制循环终止条件。 ### 二、一次性读取多行(`readlines()`) ```python with open('file.txt', 'r') as f: lines = f.readlines(10000) # 指定缓冲区大小 for line in lines: print(line, end='') ``` - **优点**:通过调整缓冲区大小(如一次读取10,000行)平衡速度与内存占用,适合中等规模文件[^1]。 - **缺点**:若未合理设置缓冲区,可能内存消耗较高。 ### 三、直接遍历文件对象 ```python with open('file.txt', 'r') as f: for line in f: print(line, end='') ``` - **优点**:语法简洁,自动处理文件关闭和内存释放,适合大多数场景[^1]。 - **缺点**:对超大规模文件仍需注意内存管理。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值