如何在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

类似文章