python文件读写操作方法,Python文件的读写

  python文件读写操作方法,Python文件的读写

  Python中的文件读写-实际操作

  用Python打开文件

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

  file_object = open(filename, mode)

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

  如果使用的是Windows,还可以指定文件所在的确切路径,如“C: \ this folder \ workdata.txt”。

  但是请记住,字符串中的一个反斜杠对Python来说表示字符串文字的开始。所以这里就出现了一个问题,因为这两个意思会冲突。

  幸运的是,Python有两种方法可以解决这个问题。第一种是使用双反斜杠: c : \ \ this folder \ \ work data . txt 。第二种是用正斜杠:‘c :/this folder/work data . txt’。

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

  当w- 写入模式:需要更改文件以及更改或添加信息时,使用此模式。请记住,这将删除现有文件以创建新文件。文件指针在文件的开头。

  当r- 读取模式:文件中的信息仅用于读取且不以任何方式更改时,使用此模式。文件指针在文件的开头。

  a- 附加模式:模式会自动将信息添加到文件的末尾。文件指针放在文件的末尾。

  当你想改变一个文件并从中读取信息时,可以使用r+- 读/写模式:。文件指针在文件的开头。

  打开a+- 附加和读取模式:文件,允许数据添加到文件的末尾,并让程序也读取信息。文件指针放在文件的末尾。

  当使用二进制文件时,将使用相同的模式描述符。但是,你在结尾加了一个b。所以二进制文件的写模式说明符是‘WB’。其余分别为‘r b’、‘a b’、‘Rb’和‘ab’。

  在Python 3中,添加了一种新模式:

  x- 独占创建模式:这种模式是专门用来创建文件的。如果同名文件已经存在,函数调用将失败。

  让我们看一个如何打开文件和设置访问模式的例子。

  当使用这个open()函数时,结果通常被赋给变量。给定一个名为workData.txt的文件,打开该文件进行读写的正确代码如下:

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

  这样就会创建一个名为data_file的对象,然后我们就可以使用Pythons的file对象方法进行操作了。

  在这个代码示例中,我们使用了访问模式,它告诉Python我们想要打开文件进行读写。这为我们提供了很大的灵活性,但通常你可能想把你的程序限制在只读或只写文件,这是其他模式派上用场的地方。

  在Python中关闭文件

  在阅读和写作时,知道如何关闭文件是非常重要的。

  它释放程序用于I/O目的的系统资源。当编写空间或内存受限的程序时,可以有效地管理资源。

  此外,关闭文件可确保将任何挂起的数据写入底层存储系统,如本地磁盘驱动器。通过显式关闭文件,可以确保内存中的任何缓冲数据都被刷新并写入文件。

  Python中关闭文件的功能很简单:fileobject.close()。使用我们在上一个示例中创建的文件对象data_file,关闭它的命令将是:

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

  

>>>f=open("/tmp/myfile.txt","w")

  >>>f.close()

  >>>f.read()Traceback(mostrecentcalllast):

  File"<input>",line1,in<module>

  f.read()ValueError:I/Ooperationonclosedfile.

在Python中,打开和关闭文件的最佳实践使用with关键字。嵌套代码块完成后,此关键字将自动关闭文件:

  

withopen("workData.txt","r+")asworkData:

  #Fileobjectisnowopen.

  #Dostuffwiththefile:

  workData.read()

  #Fileobjectisnowclosed.

  #Dootherthings...

如果您不使用该with关键字或使用该fileobject.close()函数,那么Python将通过内置的垃圾收集器自动关闭并销毁文件对象。但是,根据您的代码,此垃圾收集可以随时进行。

  所以建议使用with关键字来控制何时关闭文件 - 即在内部代码块完成执行之后。

  使用Python文件对象

  成功打开文件后,可以使用内置方法处理新文件对象。您可以从中读取数据,也可以向其中写入新数据。还有其他操作,如移动“读/写指针”,它确定从中读取文件数据的位置以及写入的位置。

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

  在Python中从文件中读取数据

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

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

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

  

Thisdataisonline1

  Thisdataisonline2

  Thisdataisonline3

然后,如果您在Python 3中编写以下程序:

  

withopen("workData.txt","r+")aswork_data:

  print("Thisisthefilename:",work_data.name)

  line=work_data.read()

  print(line)

你会得到这个输出:

  

Thisisthefilename:workData.txt

  Thisdataisonline1

  Thisdataisonline2

  Thisdataisonline3

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

  

line=workData.read(6)
您将获得以下输出:

  

Thisisthefilename:workData.txt

  Thisd

如您所见,读取操作仅读取文件中的数据到位6,这是我们传递给read()上面的调用的内容。这样,您可以一次性限制从文件中读取的数据量。

  如果再次从同一文件对象中读取,它将继续读取您中断的数据。这样,您就可以在几个较小的“块”中处理大型文件。

  逐行阅读文本文件 readline()

  您还可以通过逐行读取来解析文件中的数据。这可以让您逐行扫描整个文件,只在您想要的时候前进,或者让您看到特定的行。

  该fileobject.readline(size)方法默认返回文件的第一行。但是通过更改整数size参数,您可以获得所需文件中的任何行。

  例如:

  

withopen("workData.txt","r+")aswork_data:

  print("Thisisthefilename:",work_data.name)

  line_data=work_data.readline()

  print(line_data)

这将返回以下输出:

  

Thisisthefilename:workData.txt

  Thisdataisonline1

将a 2或a 3作为size变量将相应地返回第二行或第三行。

  类似的方法是fileobject.readlines()调用(注意复数),它以元组格式返回每一行。如果您打电话:

  

print(work_data.readlines())
您将获得以下输出:

  

['Thisdataisonline1','Thisdataisonline2','Thisdataisonline3']
如您所见,这会将整个文件读入内存并将其拆分为多行。但这仅适用于文本文件。二进制文件只是一个数据块 - 它实际上并不具有单行的概念。

  逐行处理整个文本文件

  在Python中逐行处理整个文本文件的最简单方法是使用一个简单的循环:

  

withopen("workData.txt","r+")aswork_data:

  forlineinwork_data:

  print(line)

这有以下输出:

  

Thisdataisonline1

  Thisdataisonline2

  Thisdataisonline3

这种方法非常节省内存,因为我们将单独读取和处理每一行。这意味着我们的程序永远不需要立即将整个文件读入内存。因此,使用readline()是一种以较小的块处理大文本文件的舒适且有效的方式。

  使用Python写入文件到Python write()

  如果您无法向他们写入数据,那么文件就不会有任何好处。

  请记住,当您创建新文件对象时,如果文件尚不存在,Python将创建该文件。首次创建文件时,您应该使用a+或w+模式。

  通常最好使用该a+模式,因为数据将默认添加到文件的末尾。使用w+将清除文件中的任何现有数据,并为您提供“空白”。

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

  

work_data.write("Thisdataisonline4\n")
的\n充当新行指示,移动后续写入到下一行。

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

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

  

values=[1234,5678,9012]withopen("workData.txt","a+")aswork_data:

  forvalueinvalues:

  str_value=str(value)

  work_data.write(str_value)

  work_data.write("\n")

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

  请记住,使用a+模式编写时,文件指针始终位于文件末尾。因此,在我们编写两个数字的情况下使用上面的代码,如果你使用这个fileobject.write()方法,你就不会得到任何回报。那是因为该方法正在寻找指向其他文本的指针。

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

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

  0 - 表示文件的开头

  1 - 表示当前指针位置

  2 - 表示文件的结尾

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

  因此,通过work_data.seek(3, 0)在我们的“workData.txt”文件中使用,您将指针放在第4个字符处(请记住,Python开始计数为0)。如果使用行打印循环,则会得到以下输出:

  

sdataisonline1

  Thisdataisonline2

  Thisdataisonline3

如果要检查指针的当前位置,可以使用该fileobject.tell()方法,该方法返回当前文件中指针所在位置的十进制值。如果我们想查找当前work_data文件的时长,我们可以使用以下代码:

  

withopen("workData.txt","a+")aswork_data:

  print(work_data.tell())

这将返回69,这是文件的大小。

  使用Python编辑现有文本文件

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

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

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

  例如,使用我们的“workData.txt”文件,假设我们需要在第一行和第二行之间插入文本行“这在第1行和第2行之间”。这样做的代码是:

  

#Openthefileasread-only

  withopen("workData.txt","r")aswork_data:

  work_data_contents=work_data.readlines()

  work_data_contents.insert(1,"Thisgoesbetweenline1and2\n")

  #Re-openinwrite-onlyformattooverwriteoldfile

  withopen("workData.txt","w")aswork_data:

  work_dataContents="".join(work_data_contents)

  work_data.write(work_data_contents)

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

  

withopen("workData.txt","r")aswork_data:

  forlineinwork_data:

  print(line)

你会得到一个输出:

  

Thisdataisonline1

  Thisgoesbetweenline1and2

  Thisdataisonline2

  Thisdataisonline3

现在就演示了如何在Python中编辑现有的文本文件,在您想要的位置插入新的文本行。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python文件路径操作方法总结怎么写,python文件路径操作方法总结表,python文件路径操作方法总结
  • python文件路径操作方法总结怎么写,python文件路径操作方法总结图
  • ,,PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
  • python文件加密存储,python通过文件读写,复制图片
  • python文件打开的默认方式是只读,python以只读方式打开文本文件的参数
  • python文件读写,python将数据写入文件和从文件读取
  • 怎么把python文件变成可执行exe,python将py文件编译成exe文件
  • 打开python文件的两种方式,python文件是怎么打开
  • python文件操作write,python文件write函数的用法
  • linux如何编译python文件,linux上python编译器
  • python打不开文件怎么回事,做好的python文件直接打开怎么不能用
  • python中绝对路径,python文件相对路径怎么写
  • python对文件的操作方法有哪些,python文件的基本操作
  • python关于文件的题目,python文件概述
  • python文件可以直接运行吗,python直接运行
  • 留言与评论(共有 条评论)
       
    验证码: