Python 逐行读取文件的各种方法
5 分钟阅读
在本教程中,我们将描述 Python 中逐行读取文件的多种方法,并提供示例,例如使用 readlines()、上下文管理器、while 循环等。在此之后,您可以根据条件在项目中采用最适合的这些方法之一。
Python 使程序员的文件 I/O 变得超级容易。但是,由您决定哪种技术最适合您的情况。这将取决于许多参数,例如此类操作的频率、文件的大小等。
假设我们有一个 logs.txt 文件与 Python 脚本一起驻留在同一个文件夹中。
在 Python 中逐行读取文件的各种技术
现在,我们将逐行介绍每种方法以读取文件。
Readlines() 一起读取所有行
对于较小的文件,我们建议使用此解决方案。如果文件大小很大,则在将整个文件加载到内存中时,它会变得效率低下。
但是,当文件较小时,更容易逐行加载和解析内容。
readlines() 返回文件中所有行的序列,每个行都包含换行符,最后一个除外。
我们已经在下面的示例中演示了 readlines() 函数的使用。在这里,您可以看到我们也在使用 Python while 循环来遍历这些线。
例
ListOfLines = ["Python", "CSharp", "PHP", "JavaScript", "AngularJS"]
def createFile():
wr = open("Logs.txt", "w")
for line in ListOfLines:
wr.write(line)
wr.write("\n")
wr.close()
def readFile():
rd = open ("Logs.txt", "r")
out = rd.readlines()
# Close file
rd.close()
return out
# Main test
def main():
# create Logs.txt
createFile()
# read lines from Logs.txt
outList = readFile()
# Iterate over the lines
for line in outList:
print(line.strip())
# Run Test
if __name__ == "__main__":
main()
输出如下:
Python
CSharp
PHP
JavaScript
AngularJS
另一方面,上述解决方案将导致大文件的内存使用率很高。因此,您应该选择不同的方法。
例如,您可能想尝试这个。
Readline() 逐行读取文件
当文件大小达到 MB 或 GB 时,正确的想法是一次获取一行。Python readline() 方法有效地完成了这项工作。它不会一次性加载所有数据。
readline() 读取文本直到换行符并返回该行。它通过返回一个空白字符串来处理 EOF(文件结尾)。
例
ListOfLines = ["Tesla", "Ram", "GMC", "Chrysler", "Chevrolet"]
def createFile():
wr = open("Logs.txt", "w")
for line in ListOfLines:
# write all lines
wr.write(line)
wr.write("\n")
wr.close()
def readFile():
rd = open ("Logs.txt", "r")
out = [] # list to save lines
while True:
line = rd.readline()
if not line :
break;
out.append(line.strip())
rd.close()
return out
# Main test
def main():
createFile()
outList = readFile()
for line in outList:
print(line.strip())
if __name__ == "__main__":
main()
执行后,输出为:
Tesla
Ram
GMC
Chrysler
Chevrolet
使用 Python 上下文管理器读取文件
Python提供了上下文管理器的概念。它涉及将“with”子句与文件 I/O 函数一起使用。它会跟踪打开的文件,并在文件操作结束后自动关闭它。
因此,我们可以确认您永远不会错过使用上下文管理器关闭文件句柄。它执行清理任务,例如相应地关闭文件。
在下面的示例中,您可以看到我们使用上下文管理器(with)和Python for loop首先写入然后读取行。
例
ListOfLines = ["NumPy", "Theano", "Keras", "PyTorch", "SciPy"]
def createFile():
with open ("testLog.txt", "w") as wr:
for line in ListOfLines:
# write all lines
wr.write(line)
wr.write("\n")
# Function to read test log using context manager
def readFile():
rd = open ("testLog.txt", "r")
out = [] # list to save lines
with open ("testLog.txt", "r") as rd:
for line in rd:
out.append(line.strip())
return out
def main():
createFile()
outList = readFile()
for line in outList:
print(line.strip())
if __name__ == "__main__":
main()
运行代码片段后,输出为:
NumPy
Theano
Keras
PyTorch
SciPy