Python 简明教程

Python - Write to File

对文件进行写入涉及以特定模式打开文件、向其写入数据,然后关闭文件以确保保存所有数据并释放资源。 Python 提供了一个内置函数 open() 来处理文件操作和各种写入数据的方法。

Opening a File for Writing

打开文件进行写入是执行 Python 中写入操作的第一步。open() 函数用于以不同模式打开文件,每种模式都适用于特定用例。

The open() Function

open() 函数在 Python 中用于打开文件。它至少需要一个参数(文件名),可以接受一个可选的第二个参数,该参数指定应打开文件的模式。

File Modes for Writing

以下是用于将文件打开为写入模式的主要模式 −

  1. w (Write mode) − 打开文件以供写作。如果该文件存在,它将在写作之前截断(清空)该文件。如果该文件不存在,则创建一个新文件。

  2. a (Append Mode) − 数据应该写入文件末尾。如果该文件不存在,则创建一个新文件。

  3. x (Exclusive Creation Mode) − 打开该文件以供唯一创建。如果该文件已经在,则该操作会失败。

  4. b (Binary Mode) − 当与其他模式一同使用时,以二进制模式打开该文件。

  5. + (Update Mode) − 打开该文件以供更新(读写)。

当你想从头开始,每次打开该文件时,往该文件里写入数据时,使用该模式 −

file = open("example.txt", "w")
file.write("Hello, World!")
file.close()
print ("File opened successfully!!")

以下是所获得的输出 −

File opened successfully!!

当你想将数据添加到该文件末尾时,而不用改变其现有内容时,使用该模式 −

file = open("example.txt", "a")
file.write("Appending this line.\n")
file.close()
print ("File opened successfully!!")

这会产生以下结果 −

File opened successfully!!

Writing to a File Using write() Method

write() 方法用来将一个字符串写入文件。这使其适用于各种基于文本的文件操作。

write() 方法采取单个参数:你想写入文件的字符串。它将该字符串的确切内容写入文件,而无需添加任何附加字符,例如换行符。

Example

在下面的示例中,我们以写入模式打开文件“example.txt”。然后我们使用 write() 方法将一个字符串写入文件 −

# Open a file in write mode
with open("example.txt", "w") as file:
   file.write("Hello, World!\n")
   file.write("This is a new line.\n")
print ("File opened successfully!!")

以下是上面代码的输出: -

File opened successfully!!

Writing to a File Using writelines() Method

writelines() 方法用来将一个字符串列表写入文件。列表中的每一个字符串都被顺序写入文件,无需自动添加任何换行符。

Example

在这个示例中,我们创建一个字符串列表 lines,列表中的每个字符串都以换行符结尾。然后我们以写入模式打开文件“example.txt”,并使用 writelines() 方法将列表中的所有字符串一次性写入文件 −

# List of lines to write to the file
lines = ["First line\n", "Second line\n", "Third line\n"]

# Open a file in write mode
with open("example.txt", "w") as file:
    file.writelines(lines)

print ("File opened successfully!!")

获得的输出如下所示 −

File opened successfully!!

Writing to a New File

在 Python 中写入新文件需要创建一个新文件(或覆盖现有的文件)并向其中写入所需内容。在此,我们将解释写入新文件的步骤 −

  1. Open the File − 使用 open() 函数以写入模式(二进制文件为“w”或“wb”)创建或打开一个文件。

  2. Write Data − 使用 write() 或 writelines() 方法向文件写入数据。

  3. Close the File − 确保在写入后正确地关闭文件,通常使用“with”语句进行自动处理。

Example

在下面的示例中,我们创建一个“foo.txt”文件,并向该文件中写入给定内容,最后关闭该文件 −

# Open a file
fo = open("foo.txt", "w")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opened file
fo.close()

如果你使用任何文本编辑应用程序(如记事本)打开此文件,它将具有以下内容 −

Python is a great language.
Yeah its great!!

Writing to a New File in Binary Mode

默认情况下,文件对象上的读/写操作在文本字符串数据上执行。如果我们需要处理不同类型文件,比如媒体文件(mp3)、可执行文件(exe)或图片(jpg),我们必须通过将 'b' 前缀添加到读/写模式中,以二进制模式打开文件。

Writing Binary Data to a File

要将二进制数据写入文件,在二进制写模式('wb')中打开文件。以下示例演示此操作 −

# Open a file in binary write mode
with open('test.bin', 'wb') as f:
   # Binary data
   data = b"Hello World"
   f.write(data)

Converting Text Strings to Bytes

文本字符串到字节的转换可以使用 encode() 函数完成。当您需要将文本数据作为二进制数据写入时,此操作非常有用 −

# Open a file in binary write mode
with open('test.bin', 'wb') as f:
   # Convert text string to bytes
   data = "Hello World".encode('utf-8')
   f.write(data)

Writing to an Existing File

当以写模式('w')打开现有文件时,其以前的内容会被清除。以写权限打开文件会将其视为新文件。要将数据添加到现有文件中而不清除其内容,您应该以追加模式('a')打开文件。

Example

以下示例演示如何以追加模式打开文件并在其中添加新文本 −

# Open a file in append mode
fo = open("foo.txt", "a")
text = "TutorialsPoint has a fabulous Python tutorial"
fo.write(text)

# Close opened file
fo.close()

如果你使用任何文本编辑应用程序(如记事本)打开此文件,它将具有以下内容 −

Python is a great language.
Yeah its great!!
TutorialsPoint has a fabulous Python tutorial

Writing to a File in Reading and Writing Modes

当使用 'w' 或 'a' 打开文件进行写入时,无法在文件中的任何早期字节位置执行写操作。然而,'w+' 模式可以在不关闭文件的情况下执行读写操作。seek() 函数用于将读/写指针移动到文件中的任何所需字节位置。

Using the seek() Method

seek() 方法用于设置文件内读/写指针的位置。seek() 方法的语法如下 −

fileObject.seek(offset[, whence])

其中,

  1. offset − 这是文件内读/写指针的位置。

  2. whence − 这是可选的,默认为 0,表示绝对文件定位,其他值为 1,表示相对于当前位置查找,2 表示相对于文件末尾查找。

以下程序演示如何以读写模式('w+')打开文件,写入一些数据,查找特定位置,然后覆盖文件内容的一部分 −

# Open a file in read-write mode
fo = open("foo.txt", "w+")

# Write initial data to the file
fo.write("This is a rat race")

# Move the read/write pointer to the 10th byte
fo.seek(10, 0)

# Read 3 bytes from the current position
data = fo.read(3)

# Move the read/write pointer back to the 10th byte
fo.seek(10, 0)

# Overwrite the existing content with new text
fo.write('cat')

# Close the file
fo.close()

如果我们在读取模式下打开文件(或在 'w+' 模式下找到起始位置)并读取内容,它将显示以下内容 −

This is a cat race