如何在 Python 中处理文件

在任何编程语言中,文件处理都是一个重要方面。 Python 还支持以不同的模式处理文件,例如读取和写入文件等等。

在本教程结束时,您将能够:

  • 在 Python 中打开和读取文件,
  • 从文本文件中读取行,
  • 写入并附加到文件,以及
  • 使用上下文管理器在 Python 中处理文件。

如何在 Python 中读取文件

要在 Python 中打开文件,可以使用通用语法:open(‘file_name’,’mode’)。

  • 这里,file_name 是文件的名称。

注意:如果您要打开的文件在当前工作目录中,您可以只提及文件名。 如果它位于您工作环境中的另一个文件夹中,您应该包含该文件的路径。

  • 参数 mode 指定您想要打开文件的模式。

打开文件的默认模式是读取——用字母“r”表示。 但是,建议明确指定模式。

在开始之前,让我们看一下文件 lib.txt,我们将在本例中使用它。

📁 下载本教程中使用的文本文件和代码 这个 GitHub 存储库.

下面的代码片段显示了如何使用 open() 函数在 Python 中打开文本文件“lib.txt”并读取其内容。

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
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() 函数返回一个文件对象,我们选择称它为文件。
  • 接下来,我们在文件上调用 read() 方法。
  • 变量内容现在包含文件的内容。 我们打印出来。
  • 最后,我们关闭文件。
  您可以购买的 12 个最佳便携式充电器 [2022]

但是,如果您忘记关闭文件,则可能会浪费资源。 如果您正在处理大量此类文件,则可能会占用大量内存。 这是因为您已经打开了多个文件,但没有关闭其中的任何一个。

现在,让我们学习一种更好的打开文件的方法 上下文管理器. 下面的代码片段显示了如何使用它们。

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

使用联系人管理器处理文件时,您不必使用 close() 方法。 I/O 操作完成后文件会自动关闭。

如何在 Python 中从文件中读取行

在我们的示例文本文件中,我们只有几行。 因此,一次读取所有文件内容不是问题。

但是,当您需要读取大文件时,使用 read() 方法,如上所示,可能效率不高。

事实上,如果文本文件非常大,您可能很快就会耗尽内存。 这就是为什么您可能希望从文本文件中读取只读行的原因,您将在本节中学习如何执行此操作。

使用 Python 的 readline() 方法从文件中读取行

readline() 方法从文件中一次读取一行。

运行以下代码片段。

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
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)


# Output
Hello, there!

Hello, there!

使用 Python 的 readlines() 方法从文件中读取行

还有另一种密切相关的方法称为 readlines()。

当您运行以下代码片段时,您会看到 readlines() 方法返回文件中所有行的列表。

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['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 中从文件中读取内容块

在 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 position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 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='')

# Output
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 大小的块读取文件的内容,直到到达文件末尾。 ✅

  Raid 0 vs Raid 1:异同

如何在 Python 中写入文件

为了在 Python 中写入文本文件,您应该以写入模式打开它——指定“w”。

下面的代码片段显示了如何做到这一点。

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

您会看到“new_file.txt”已在您的工作目录中创建。

现在,再次运行上面的代码单元。

在您的终端中运行以下命令:

cat new_file.txt

# Output: Hello, Python!

理想情况下,我们已经写入文件两次。 所以你好,Python! 应该打印两次吧?

但是您会看到它只打印了一次。 嗯,这是因为当您以写入 (w) 模式打开文件时,您基本上会用新内容覆盖文件的内容。

如果您想在不覆盖现有内容的情况下添加到文件末尾,则应以附加模式打开文件。 您将在下一节中看到如何做到这一点。

如何在 Python 中追加到文件

如果您想将内容附加到文件而不覆盖,请在附加模式下打开它。

为此,请使用“a”——a 表示追加——并明确指定模式。

接下来,运行以下代码单元两次。

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

注意文本现在是如何打印两次的,因为我们附加到文件中。

cat new_file.txt

# Output: Hello, Python!Hello, Python!

结论

让我们快速总结一下我们在本教程中讨论的内容。

  • 您已经了解了常见的文件 I/O 操作,例如读取、写入和附加到文件。
  • 此外,您还学习了如何使用 seek() 方法将文件指针移动到特定位置,以及
  • 如何使用 tell() 方法检索文件指针的当前位置。

我希望您发现本教程对您有所帮助。 既然您已经学习了如何在 Python 中处理文本文件,那么请学习如何在 Python 中处理 JSON 文件。

有关的:

分 3 步检查 Python 中列表的长度。