Python中IO文件处理(2)

今天学习使用Python处理文件的基础知识第二篇。如何从文件中读取数据,如何向文件写入数据,查找什么文件,以及为什么应该关闭文件。

下面是IO文件处理的内容:
    1.二进制文件和文本文件之间的区别
    2.在哪里可以找到Python的内置文件I/O函数和工具
    3.如何在Python中打开和关闭文件
    4.在Python中从文件读取数据的各种方法
    5.如何写数据到一个文件对象在Python
    6.文件寻找在Python和移动读/写指针
    7.用Python编辑现有的文本文件




使用write()使用Python编写文件

如果不能向文件写入数据,文件就没有任何用处。 第一次创建文件时,应该使用a+或w+模式。这样在创建新的file对象时,如果文件不存在,Python将创建该文件。 通常最好使用a+模式,因为数据将默认添加到文件的末尾。使用w+将清除文件中的任何现有数据。 在Python中,写入文件的默认方法是使用fileobject.write(data)。例如,您可以向我们的“workData.txt”添加一个新行。 代码如下:

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


\n是换行符,将后续写操作移动到下一行。 如果您想将一些不是字符串的内容写入文本文件,例如一系列数字,您必须使用转换代码将它们转换或“强制转换”为字符串。 例如,如果您想要将整数1234、5678、9012添加到work_data文件中,您需要执行以下操作。首先,将非字符串转换为字符串,然后将字符串写入file对象:

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") 



文件寻找:移动读/写指针

请记住,当您使用a+模式写文件时,您的文件指针总是在文件的末尾。因此,在上面的代码中,如果您使用fileobject.write()方法,您将不会得到任何回报。这是因为该方法在查找指针以查找附加文本。 然后,您需要做的是将指针移回文件的开头。最简单的方法是使用fileobject.seek(offset, from_what)方法。在这个方法中,您将指针放在一个特定的位置。 偏移量是from_what参数的字符数。from_what参数有三个可能的值:     0 -表示文件的开头     1 -表示当前指针位置     2 -表示文件结束 当您处理文本文件(那些在模式下没有b的情况下打开的文件)时,您只能使用默认的0或seek(0,2),它将带您到达文件的末尾。 通过使用work_data.seek(3, 0)在我们的“workData.txt ”上查找文件,你将把指针放在第4个字符(记住Python从0开始计数),如果你使用行打印循环,你将得到一个输出:

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

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

with open("workData.txt", "a+") as work_data:
    print(work_data.tell())

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




用Python编辑现有的文本文件

有时,您需要编辑现有文件,而不仅仅是向其添加数据。不能只用w+模式。请记住,模式w将完全覆盖文件,因此即使使用fileobject.seek(),也无法做到这一点。而+总是会在文件的末尾插入任何数据。
最简单的方法是取出整个文件并使用它创建一个list 或者 array 数据类型。一旦创建了列表,您就可以使用该列表了。list.insert(i, x)方法插入新数据。一旦创建了新的列表,您就可以将其合并在一起并将其写入文件。
记住这个list.insert(i, x)  i是表示单元格数的整数。然后,x的数据被放在i表示的列表中的单元格前面
例如,使用我们的workData.txt文件,假设我们需要插入文本行,“这在第一行和第二行之间”。代码是:


# 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文件处理的基础知识。以下是我们讨论的主题范围:
二进制文件和文本文件之间的区别
在哪里可以找到Python的内置文件I/O函数和工具
如何在Python中打开和关闭文件
在Python中从文件读取数据的各种方法
如何写数据到一个文件对象在Python
文件寻找在Python和移动读/写指针
用Python编辑现有的文本文件
但实际上,我们在这里只触及了表面。与任何与编程相关的东西一样,还有很多东西需要学习……

转载翻译:https://dbader.org/blog/python-file-io

本文标签: 处理文件 IO
转载声明:本文为网中小南的原创文章,转载请注明原文地址,谢谢合作

发表评论: