如何在Python中处理文件
在任何编程语言中,文件处理都是一个重要的方面。Python也支持以不同模式处理文件,例如读取和写入文件等。
通过本教程结束时,您将能够:
- 打开并读取链接_0
- 从文本文件中读取行
- 写入和追加文件
- 使用上下文管理器处理链接_1
如何在Python中读取文件
要在Python中打开文件,可以使用一般的语法:open('file_name','mode')
。
- 在这里,
file_name
是文件的名称。
注意:如果您要打开的文件位于当前工作目录中,只需提及文件的名称。如果它位于工作环境中的另一个文件夹中,则应包含文件的路径。
- 参数
mode
指定您要打开文件的模式。
打开文件的默认模式是读取,表示为字母
'r'
。但是,建议明确指定模式。
在开始之前,让我们来看一下我们将在本例中使用的文件lib.txt
。
📁 从链接_2下载本教程中使用的文本文件和代码。
下面的代码片段显示如何使用open()
函数在Python中打开一个名为'lib.txt'
的文本文件,并读取其内容。
file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()
# 输出
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels
在上面的示例中,
open()
函数返回一个文件对象,我们选择将其命名为file
。- 接下来,我们调用
file
上的read()
方法。 - 变量
contents
现在包含文件的内容。然后我们将其打印出来。 - 最后,我们关闭文件。
然而,如果您忘记关闭文件,可能会造成资源的浪费。如果您正在处理大量这样的文件,可能会占用大量内存。这是因为您已经打开了多个文件,但没有关闭任何一个文件。
现在,让我们学习使用链接_3来更好地打开文件的方式。下面的代码片段显示了如何使用它们。
with open('lib.txt','r') as f:
contents = f.read()
print(contents)
使用上下文管理器处理文件时,您不需要使用close()
方法。文件在I/O操作完成后会自动关闭。
如何从文件中读取行
在我们的示例文本文件中,只有几行。因此,一次性读入所有文件内容没有问题。
然而,当您需要读取大文件时,使用上面展示的read()
方法可能不是非常高效。
实际上,如果文本文件非常大,您可能很快就会耗尽内存。这就是为什么您可能希望只从文本文件中读取行,您将在本节中学习如何做到这一点。
使用Python的readline()方法从文件中读取行
readline()
方法一次读取一行。
运行以下代码片段。
with open('lib.txt','r') as f:
line = f.readline()
print(line)
line = f.readline()
print(line)
# 输出
Hello, there!
Here are a few helpful Python libraries:
您可以看到,在第一次调用readline()
方法之后,文件的第一行被打印出来。而第二次调用readline()
方法返回文件中的第二行。
这是因为,在第一次方法调用之后,文件指针位于第二行的开头。
在Python中,您可以使用
tell()
方法获取文件指针的当前位置。要将文件指针移动到特定位置,可以使用seek()
方法。
在下面的代码片段中,我们在第一次方法调用后使用了f.seek(0)
。这将文件指针移动到文本文件的开头。这就是为什么两次都会打印出文件中的第一行。
with open('lib.txt','r') as f:
line = f.readline()
print(line)
f.seek(0)
line = f.readline()
print(line)
# 输出结果
Hello, there!
Hello, there!
使用Python的readlines()方法从文件中读取行
还有一个密切相关的方法叫做readlines()
。
当您运行以下代码片段时,您将看到readlines()
方法返回文件中所有行的列表。
with open('lib.txt','r') as f:
lines = f.readlines()
print(lines)
# 输出结果
['Hello, there!n', 'Here are a few helpful Python libraries:n',
'1) NumPyn', '2) pandasn', '3) matplotlibn',
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn',
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']
使用Python的for循环从文件中读取行
为了从文本文件中读取行,您也可以使用for
循环。
一旦您拥有一个文件对象,您可以使用for
循环遍历文件的内容——一次一行,并将它们打印出来,如下所示。请注意,我们只访问一行,而不是读取整个文件的内容。
with open('lib.txt','r') as f:
for line in f:
print(line, end='')
注意:使用Python的
print()
函数时,默认分隔符是换行符'n'
。但在原始文件中,我们没有这些换行符。因此,将分隔符参数设置为空字符串:end = ''
,以按原样打印文件的内容。
如何以小块方式从文件中读取内容
在Python中,您还可以选择按照小块的方式读取文件的内容。
请阅读下面的代码:
- 在这里,我们将
chunk_size
设置为50
。这意味着将读取文件中的前50个字符,并将它们打印出来。
- 现在,调用文件对象
f
上的tell()
方法。您可以看到文件指针现在位于位置51,这是预期的。
chunk_size = 50
with open('lib.txt','r') as f:
chunk = f.read(chunk_size)
print(chunk)
current = f.tell()
print(f"文件指针的当前位置:{current}")
# 输出结果
Hello, there!
Here are a few helpful Python librar
文件指针的当前位置:51
您还可以使用这种技术以小块的方式读取整个文件。
下面的代码片段展示了您可以如何做到这一点。
chunk_size = 50
with open('lib.txt','r') as f:
chunk = f.read(chunk_size)
print(chunk,end='')
while(len(chunk)>0):
chunk = f.read(chunk_size)
print(chunk,end='')
# 输出结果
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels
在这里,我们使用一个while
循环来读取文件的内容。我们以大小为50的块读取文件的内容,直到达到文件的末尾。✅
如何在Python中写入文件
为了在Python中写入文本文件,您应该以写入模式打开它,即指定'w'
。
下面的代码片段显示了如何进行操作。
with open('new_file.txt','w') as f:
f.write('Hello, Python!')
您会看到'new_file.txt'
已在您的工作目录中创建。
现在,再次运行上面的代码单元格。
在终端中运行以下命令:
cat new_file.txt
# 输出:Hello, Python!
理想情况下,我们已经将内容写入文件两次。所以Hello, Python!
应该被打印两次,对吗?
但是您会发现它只打印了一次。这是因为当您以写入(w
)模式打开文件时,您基本上用新内容覆盖了文件的内容。
如果您想要在不覆盖现有内容的情况下添加到文件末尾,您应该以追加模式打开文件。您将在下一节中看到如何做到这一点。
如何在Python中追加到文件
如果您想要在文件中追加内容-而不覆盖,请以追加模式打开它。
为此,请使用'a'
–a表示追加-并明确指定模式。
接下来,运行以下代码单元格两次。
with open('new_file.txt','a') as f:
f.write('Hello, Python!')
请注意,由于我们追加到文件中,现在文本被打印了两次。
cat new_file.txt
# 输出:Hello, Python!Hello, Python!
结论
让我们快速总结一下本教程中的内容。
- 您已经学会了常见的文件I/O操作,如读取、写入和追加文件。
- 此外,您还学会了如何使用seek()方法将文件指针移动到特定位置,以及
- 如何使用tell()方法检索文件指针的当前位置。
希望您会发现本教程有用。既然您已经学会了如何处理Python中的文本文件,请了解如何work with JSON files in Python
。
相关:
在3个步骤中检查length of a list in Python
。