Python中使用文件IO操作

Python中使用文件I/O操作

Python中使用文件I/O操作

  了解在Python中处理文件的基础知识。如何读取文件,如何向文件写入数据,寻找什么文件,以及为什么要关闭文件。本文晓得博客为你介绍Python中使用文件I/O操作。

Python中使用文件I/O操作

在Python中读取和写入文件

  在本教程中,您将学习如何使用Python处理文件。

  以任何编程语言读取和写入文件都是一项重要功能。没有它,所有变量和信息都存储在易失性存储器上,当计算机关闭或程序结束时,这些易失性存储器就会丢失。当您将数据保存到永久文件时,您可以在以后检索它而无需担心。

Python中的二进制文件与文本文件

  Python处理两种不同类型的文件:二进制文件和文本文件。了解两者之间的区别很重要,因为它们是如何处理的。

  您在正常使用计算机期间使用的大多数文件实际上是二进制文件,而不是文本。没错,Microsoft Word.doc文件实际上是一个二进制文件,即使它只是包含文本。二进制文件的其他示例包括:

  • 图像文件,包括.jpg,.png,.bmp,.gif,等。
  • 数据库文件,包括.mdb,.frm,和.sqlite
  • 文件,包括.doc,.xls,.pdf,和其他人。

  那是因为这些文件都有特殊处理的要求,需要特定类型的软件才能打开。例如,您需要Excel来打开.xls文件,而需要数据库程序来打开.sqlite文件。

  一个文本文件,另一方面,没有特定的编码,可以通过没有任何特殊处理的标准文本编辑器打开。尽管如此,每个文本文件都必须遵守一组规则:

  • 文本文件必须按原样可读。它们可以(并且经常这样做)包含许多特殊编码,尤其是在HTML或其他标记语言中,但您仍然能够分辨出它在说什么
  • 文本文件中的数据按行组织。在大多数情况下,每一行都是一个不同的元素,无论是指令行还是命令。
  • 文本文件的每一行末尾都有一个看不见的字符,这让文本编辑器知道应该有一个新行。通过编程与这些文件交互时,您可以利用该字符。在Python中,它用“n”表示。

在Python中打开文件

  您需要知道的第一个函数是open().在Python 2和Python 3中,此命令将返回参数中指定的文件对象。的基本函数用法open()如下:

file_object=open(filename,mode)

  在这种情况下,filename是您要与之交互的文件的名称,包括文件扩展名。也就是说,如果您有一个文本文件,那么您的文件workData.txt名不只是”workData”.是”workData.txt”。

  如果您使用的是Windows,您还可以指定文件所在的确切路径,例如“C:ThisFolderworkData.txt”。但是请记住,字符串中的单个反斜杠向Python指示字符串文字的开头。所以这里有一个问题,因为这两个意思会冲突……

  值得庆幸的是,Python有两种方法来处理这个问题。第一种是使用双反斜杠,如下所示:”C:ThisFolderworkData.txt”.第二种是使用正斜杠:”C:/ThisFolder/workData.txt”。

  open函数中的模式告诉Python你想对文件做什么。处理文本文件时可以指定多种模式。

  • ‘w’–写入模式:当需要更改文件以及更改或添加信息时使用此模式。请记住,这会删除现有文件以创建新文件。文件指针放在文件的开头。
  • ‘r’–读取模式:当文件中的信息仅用于读取而不以任何方式更改时,使用此模式。文件指针放在文件的开头。
  • ‘a’–附加模式:此模式自动将信息添加到文件末尾。文件指针放在文件末尾。
  • ‘r+’–读/写模式:当您将更改文件并从中读取信息时使用此模式。文件指针位于文件的开头。
  • ‘a+’–追加和读取模式:打开文件以允许将数据添加到文件末尾,并让您的程序也可以读取信息。文件指针放在文件末尾。
  • 二进制文件时,您将使用相同的模式说明符。但是,您将ab添加到末尾。所以二进制文件的写模式说明符是’wb’.其余的是’rb’,’ab’,’r+b’,和’a+b’分别。
  • ‘x’–独占创建模式:此模式专门用于创建文件。如果已存在同名文件,则函数调用将失败。

  让我们通过一个示例来说明如何打开文件并设置访问模式。Python中使用文件I/O操作,可以用该open()函数时,您通常会将其结果分配给变量。给定一个名为的文件workData.txt,打开该文件进行读写的正确代码如下

data_file=open("workData.txt","r+")

  这将创建一个名为的对象data_file,然后我们可以使用Pythons File Object Methods对其进行操作。

  我们’r+’在这个代码示例中使用了访问模式,它告诉Python我们要打开文件进行读写。这为我们提供了很大的灵活性,但通常您可能希望将程序限制为仅读取或写入文件,而这正是其他模式派上用场的地方。

  推荐:Python文件方法

在Python中关闭文件

  读取和写入时,知道如何关闭文件很重要。它释放了您的程序用于I/O目的的系统资源。在编写具有空间或内存限制的程序时,这可以让您有效地管理资源。

  此外,关闭文件可确保将任何未决数据写入底层存储系统,例如本地磁盘驱动器。通过显式关闭文件,您可以确保内存中保存的任何缓冲数据都被刷新并写入文件。Python中关闭文件的函数很简单fileobject.close()。使用data_file我们在上一个示例中创建的文件对象,关闭它的命令是:

data_file.close()

  关闭文件后,您将无法再访问它,直到您稍后重新打开它。尝试读取或写入已关闭的文件对象将引发ValueError异常:

f = open("/tmp/myfile.txt", "w")
  f.close()
  f.read()
  Traceback (most recent call last):
  File "<input>", line 1, in <module>
  f.read()
  ValueError: I/O operation on closed file.
  ValueError :对已关闭文件的 I/O 操作。

  ValueError:对已关闭文件的I/O操作。在Python中,打开和关闭文件的最佳做法是使用with关键字.此关键字在嵌套代码块完成后自动关闭文件:

with open("workData.txt", "r+") as workData:
  # File object is now open.
  # Do stuff with the file:
  workData.read()

  如果你不使用with关键字或使用fileobject.close()函数,那么Python将通过内置的垃圾收集器自动关闭并销毁文件对象。但是,根据您的代码,此垃圾收集可能随时发生。建议使用with关键字来控制文件何时关闭——即在内部代码块执行完毕后。

使用Python文件对象

  成功打开文件后,您可以使用内置方法来处理新的文件对象。您可以从中读取数据,或向其写入新数据。还有其他操作,例如移动“读/写指针”,它决定了从文件中读取数据的位置和写入的位置。我们稍后将在本教程中对此进行介绍。

使用Python文件对象

  接下来,您将学习如何从您打开的文件中读取数据:

在Python中从文件中读取数据

  读取文件内容使用该fileobject.read(size)方法。默认情况下,此方法将读取整个文件并将其作为字符串(文本模式)或字节对象(二进制模式)打印到控制台。

  但是,在使用默认大小时必须小心。如果您正在阅读的文件大于可用内存,您将无法一次访问整个文件。在这种情况下,您需要使用该size参数将其分解为您的内存可以处理的块。

  该size参数告诉read方法要返回显示的文件中有多少字节。因此,假设我们的“workData.txt”文件中包含以下文本:

This data is on line 1
This data is on line 2
This data is on line 3

  那么如果你在Python 3中编写了以下程序:

with open("workData.txt", "r+") as work_data:
  print("This is the file name: ", work_data.name)
  line = work_data.read()
  print(line)

  这是文件名:workData.txt

This is the file name: workData.txt
This data is on line 1
This data is on line 2
This data is on line 3

  另一方面,如果你调整第三行说:

line=workData.read(6)

  您将获得以下输出:

This is the file name: workData.txt
This d

  如您所见,读取操作仅将文件中的数据读取到position 6,这就是我们传递给read()上面调用的内容。这样,您可以限制一次从文件中读取多少数据。如果您再次从同一个文件对象中读取,它将继续从您离开的地方读取数据。这样您就可以在几个较小的“块”中处理一个大文件。

使用Python写入文件write()

  如果您无法将数据写入文件,文件将不会有任何好处。所以让我们讨论一下。

  请记住,当您创建一个新的文件对象时,如果该文件尚不存在,Python将创建该文件。第一次创建文件时,您应该使用a+或w+模式。通常最好使用该a+模式,因为数据将默认添加到文件的末尾。Usingw+将清除文件中的所有现有数据,并为您提供一个“空白”开始。

  在Python中写入文件的默认方法是使用fileobject.write(data).例如,您可以使用以下代码在我们的“workData.txt”文件中添加一个新行:

work_data.write("This data is on line 4\n")

  \n换行指示符,移动后续写入到下一行。

  如果您想将不是字符串的内容写入文本文件,例如一系列数字,则必须使用转换代码将它们转换或“转换”为字符串。

  例如,如果您想将整数1234、5678、9012添加到work_data文件中,您将执行以下操作。首先,将非字符串转换为字符串,然后将该字符串写入文件对象:

values = [1234, 5678, 9012]

with open("workData.txt", "a+") as work_data:
    for value in values:
        str_value = str(value)
        work_data.write(str_value)
        work_data.write("\n")

  推荐:Python逐行读取文件方法

文件搜索:移动读/写指针
python指针

  请记住,当您使用该a+模式写入时,您的文件指针将始终位于文件末尾。所以在上面的代码中我们已经写了两个数字,如果你使用这个fileobject.write()方法,你将不会得到任何回报。那是因为该方法正在查找指针以查找其他文本。

  然后,您需要做的是将指针移回文件的开头。最简单的方法是使用该fileobject.seek(offset,from_what)方法。在此方法中,您将指针放在特定位置。

  偏移量是from_what参数中的字符数。该from_what参数具有三个可能的值:

  • 0–表示文件的开头
  • 1–表示当前指针位置
  • 2–表示文件结束

  当您使用文本文件(那些在模式下没有ab打开的文件)时,您只能使用default0或a seek(0,2),这会将您带到文件的末尾。

使用Python编辑现有文本文件

  有时您需要编辑现有文件,而不仅仅是向其附加数据。你不能只使用w+模式来做到这一点。请记住,该模式w将完全覆盖文件,因此即使使用using fileobject.seek(),您也无法做到这一点。并且a+将始终在文件末尾插入任何数据。

  最简单的方法是将整个文件拉出来并用它创建一个列表或数组数据类型。创建列表后,您可以使用该list.insert(i,x)方法插入新数据。创建新列表后,您可以将其重新组合在一起并将其写回到您的文件中。

  请记住,对于list.insert(i,x),i是一个表示单元格编号的整数。然后将x的数据放在由指示的列表中的单元格之前i。

  例如,使用我们的“workData.txt”文件,假设我们需要在第一行和第二行之间插入文本行“This go between line 1 and 2”。执行此操作的代码是:

# Open the file as read-only
with open("workData.txt", "r") as work_data:
    work_data_contents = work_data.readlines()

work_data_contents.insert(1, "This goes between line 1 and 2\n")

# Re-open in write-only format to overwrite old file
with open("workData.txt", "w") as work_data:
    work_dataContents = "".join(work_data_contents)
    work_data.write(work_data_contents)

  运行此代码后,如果您执行以下操作:

with open("workData.txt", "r") as work_data:
    for line in work_data:
        print(line)

  您将获得以下输出:

This data is on line 1
This goes between line 1 and 2
This data is on line 2
This data is on line 3

  推荐:Python读取文件特定行

总结

   以上是晓得博客为你介绍Python中使用文件I/O操作。 演示了如何在Python中编辑现有文本文件,在想要的位置插入新的文本行,更多I/O详情可参考文档。如有任何问题,欢迎留言探讨。

  推荐:零基础如何开始学习Python

给文章评分

晓得博客,版权所有丨如未注明,均为原创
晓得博客 » Python中使用文件I/O操作

转载请保留链接:https://www.pythonthree.com/python-file-io/

ThemeForest 模板套件
可视化创建WordPress网站

发表评论

您的电子邮箱地址不会被公开。

Scroll to Top