如何在 Python 中处理文件

已发表: 2022-03-11

在任何编程语言中,文件处理都是一个重要方面。 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()函数返回一个文件对象,我们选择将其命名为file
  • 接下来,我们在file上调用read()方法。
  • 变量contents现在包含文件的内容。 我们打印出来。
  • 最后,我们关闭文件。

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

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

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

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

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

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

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) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\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 大小的块读取文件的内容,直到到达文件末尾。

如何在 Python 中写入文件

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

python写入文件

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

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

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

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

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

 cat new_file.txt # Output: Hello, Python!

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

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

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

如何在 Python 中追加到文件

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

为此,请使用 ` 'a' - a for append - 并明确指定模式。

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

 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 中列表的长度。