Python文件操作实战:创建并写入TXT文档

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:在IT领域,文本处理是基础且重要的一环,而创建和操作TXT文档是最基本的任务之一。本文主要探讨如何使用Python编程语言进行TXT文件的创建和内容写入,并展示如何打开和读取这些内容。本文以Python为例,由于其简洁易懂的语法,是学习文件操作的理想语言。TXT文件作为纯文本格式,广泛用于数据交换和日志记录等场景。通过使用Python内置的 open() 函数,我们可以轻松创建TXT文件,使用'w'模式进行写入,'a'模式进行内容追加,以及'r'模式进行读取。文章还涉及到如何处理用户交互,例如在Tkinter图形用户界面(GUI)中添加按钮触发文件操作。这些基础文件操作技能对于学习更高级的数据管理和文件处理至关重要。

1. 文本处理基础与TXT文件特性介绍

简介

在信息技术领域,文本文件(TXT文件)是最基础的文件格式之一,它存储未格式化的纯文本数据,可被任何文本编辑器阅读和编辑。TXT文件常用于数据交换、日志记录或简单的文档存储。

TXT文件的特性

TXT文件具有几个关键特性:

  • 无格式限制 :TXT文件不包含任何格式化信息,如字体、颜色或大小等。
  • 跨平台兼容性 :因其简单性,TXT文件在不同的操作系统和应用程序中具有很好的兼容性。
  • 小体积 :由于仅包含文本,TXT文件往往比其他格式的文件体积小,易于存储和传输。

文本处理的重要性

文本处理是数据处理的重要组成部分,对于数据清洗、日志分析、文本挖掘等领域至关重要。掌握文本处理的基础能够帮助开发者高效地实现各种文本操作任务。

在接下来的章节中,我们将深入探讨Python中的TXT文件操作,包括文件的创建、读写、查询和优化等方法。

2. Python创建TXT文件的方法

2.1 Python的文件操作基础

2.1.1 文件处理概述

在Python中,文件操作是进行数据持久化存储的关键,无论是对于文本文件TXT,还是二进制文件等其他格式。Python提供了强大的库来支持文件的创建、读取、写入和关闭操作。文件操作的核心在于打开文件(使用内置函数 open ),然后利用不同的模式和方法来实现所需的功能。完成文件操作后,切记要使用 close 方法来释放系统资源。

2.1.2 使用open()函数进行文件操作

open() 函数是Python中进行文件操作的主要接口。它用于打开一个文件,并返回一个文件对象,可以使用该对象执行诸如读取、写入、追加等操作。 open() 函数的一般用法如下:

file_object = open(file_name, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file_name :文件的路径,可以是相对路径或绝对路径。
  • mode :文件打开的模式,默认为只读模式 'r'
  • buffering :控制文件的缓冲。 0 表示无缓冲, 1 表示行缓冲,大于 1 表示缓冲区大小。
  • encoding :指定字符编码,例如 'utf-8' 。在写入文本文件时特别重要。
  • errors :处理编码错误的方式。
  • newline :控制行结束符的转换。
  • closefd :决定是否关闭文件描述符。
  • opener :自定义打开文件的方式。

在具体使用时,最常用的是 mode 参数,它控制文件打开的模式,决定了文件是用于读取还是写入,以及是以何种方式打开(比如覆盖原有内容还是追加到文件末尾等)。例如, 'w' 模式用于写入,会覆盖原有文件内容; 'a' 模式用于追加内容到文件末尾而不覆盖现有内容。

2.2 Python创建TXT文件的步骤

2.2.1 'w'模式与文件初始化

使用 'w' 模式打开文件时,如果文件已存在,其内容会被清空,如果文件不存在,则会创建一个新文件。这对于需要创建空文件或覆盖原有文件内容的场景非常有用。创建TXT文件时的代码示例如下:

# 创建并打开一个名为example.txt的文件,以写入模式
with open('example.txt', 'w') as file:
    pass  # 现在你可以使用file对象来写入内容

在这个例子中, with 语句提供了一个上下文环境,确保文件在操作完成后会被正确关闭,即使是在发生异常时也是如此。这是一个推荐的做法,因为它简化了代码并提高了程序的健壮性。

2.2.2 'a'模式与文件追加检查

'w' 模式不同, 'a' 模式(追加模式)会打开文件并写入内容到文件末尾,保留现有文件内容。如果文件不存在,它会创建一个新文件。 'a' 模式的代码使用示例如下:

# 打开一个名为example.txt的文件,以追加模式
with open('example.txt', 'a') as file:
    file.write('Hello, World!')  # 追加内容到文件末尾
2.2.3 'r'模式与文件读取检查

'r' 模式是默认的文件打开模式,用于打开文件以读取其内容。如果文件不存在,会抛出一个 FileNotFoundError 异常。读取文件的代码示例如下:

# 打开一个名为example.txt的文件,以读取模式
with open('example.txt', 'r') as file:
    content = file.read()  # 读取文件全部内容

在此处,我们使用 read() 方法来读取文件的全部内容。如果文件内容较大,可以使用 readline() readlines() 方法来逐行读取。

在Python中创建和操作TXT文件的方式多种多样,选择合适的方法能够帮助开发者高效地处理文件操作需求。下一章节将重点讨论如何使用Python向TXT文件中写入文本,这涉及到文件内容的编辑和数据的持久化存储。

3. Python写入TXT文件的方法

Python的文件操作功能强大而灵活,写入文本文件是其中非常实用的一种应用。开发者可以通过各种方法将不同类型的数据写入TXT文件中,实现数据持久化存储。本章节我们将深入探讨如何使用Python进行TXT文件的写入操作,以及如何批量生成文本文件。

使用write()方法写入文本

write()方法的基本用法

write() 方法是Python文件操作中最为基本和直接的写入方式。它能够将字符串或者字节序列写入到文件中。以下是一个基本的示例代码:

# 打开文件并写入内容
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!')

在这个例子中,我们使用了 with 语句进行文件操作。这种方式被称为上下文管理器,它能够保证文件在操作完成后正确关闭,即使在写入过程中发生异常也是如此。 'w' 模式表示文件将被打开用于写入,如果文件已经存在,其内容将被清空。 encoding='utf-8' 参数确保了我们写入的是UTF-8编码的文本,这是一种通用的字符编码,可以处理大多数语言的字符。

写入不同类型数据的处理

write() 方法不仅可以写入字符串,还可以写入任何实现了 __str__ __bytes__ 方法的类的实例。当处理非字符串类型的数据时,需要先将数据转换为字符串或字节序列。以下是一些常用数据类型的处理方式:

# 写入整数
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write(str(123))

# 写入浮点数
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write(str(123.45))

# 写入列表
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write(str([1, 2, 3]))

在写入不同类型数据时,我们通过 str() 函数将数据转换为字符串格式,确保能够被 write() 方法接受并正确写入文件。这种方式简单但需要确保数据在转换过程中不丢失重要信息。

使用writelines()方法批量写入

writelines()方法介绍

writelines() 方法可以将一个字符串序列批量写入到文件中,非常适合在循环或批量处理场景下使用。该方法接受一个字符串列表作为参数,每个字符串元素都会被写入到文件中。需要注意的是, writelines() 不会自动添加换行符,因此如果需要新行,则需要在字符串中显式包含。

# 批量写入多行文本
lines = ['First Line\n', 'Second Line\n', 'Third Line\n']
with open('example.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

在这个例子中,我们创建了一个包含三行文本的列表,并使用 writelines() 方法将它们写入 example.txt 文件中。每个字符串元素末尾都添加了换行符 \n ,以确保文件中每行文本正确换行。

使用writelines()方法的优点与注意事项

使用 writelines() 方法的优点在于它的高效率,特别是在处理大量数据时。相比单个调用 write() 方法, writelines() 可以减少对I/O的调用次数,提高写入速度。此外,它在内存中只需要存储一行数据,从而降低了内存消耗。

然而,在使用 writelines() 方法时需要注意:

  • 确保每个字符串都正确包含换行符或根据需要格式化文本。
  • 如果列表元素中包含非字符串类型,必须先转换为字符串。
  • 不存在自动刷新机制,如果需要即时查看写入的内容,可能需要手动刷新缓冲区。

实际案例分析:批量生成文本文件

下面,我们将通过一个实际案例来分析如何使用 write() writelines() 方法批量生成文本文件。假设我们需要为一个数据库生成一批日志文件,每个日志文件包含不同用户的活动记录。

案例描述

我们假设有以下用户数据:

users = [
    {"username": "user1", "activity": "login"},
    {"username": "user2", "activity": "logout"},
    {"username": "user3", "activity": "login"},
    # ... 更多用户记录 ...
]

每个用户的活动记录需要保存到单独的日志文件中,文件名为用户名,记录内容为活动类型。

案例实现

for user in users:
    log_filename = user['username'] + '.log'
    activity = user['activity']
    # 写入用户活动记录
    with open(log_filename, 'w', encoding='utf-8') as file:
        file.write(f'{activity}\n')

在这个实现中,我们遍历了用户列表,然后使用 with open() 语句创建并写入了对应用户的日志文件。每个日志文件中只写入了用户的活动记录,并在末尾添加了换行符。

案例优化

如果日志文件非常大,每次用户活动都进行文件写入将会影响性能。此时,可以考虑使用一个缓冲区存储活动记录,并在缓冲区满时再一次性写入文件。以下是一个优化后的例子:

buffer = []

for user in users:
    # ... 假设用户的活动记录收集在buffer中 ...
    # 当缓冲区满时,批量写入到文件
    if len(buffer) >= 1000:
        with open('batch.log', 'w', encoding='utf-8') as file:
            file.writelines(buffer)
        buffer.clear()  # 清空缓冲区以供下一批记录使用

在这个优化方案中,我们使用一个名为 buffer 的列表存储用户的活动记录。当 buffer 中的记录达到一定数量(例如1000条)时,我们一次性将这些记录写入名为 batch.log 的文件中,然后清空缓冲区以便收集下一批记录。这种方法可以减少I/O操作次数,提高程序运行效率。

以上内容涵盖了Python写入TXT文件的基本方法和批量处理的实践案例。掌握了这些技术后,你可以根据不同的需求灵活地处理文件写入操作,并通过实际项目来巩固和扩展你的技能。在下一章节中,我们将深入探讨如何使用Python高效地读取TXT文件内容,这也是文件操作中非常重要的一环。

4. Python读取TXT文件的方法

在处理文本文件时,读取是另一个常见的需求。本章节将详细介绍Python中读取TXT文件的各种方法,并通过示例代码和实际应用场景来展示如何高效地使用这些方法。

4.1 使用read()方法读取文件

4.1.1 read()方法的基本用法

read() 是Python文件对象的一个方法,用来读取文件内容。它将文件内容作为一个字符串返回。 read() 方法的基本语法如下:

file.read([size])

如果指定了 size 参数,则读取字节长度为 size 的数据。如果不指定 size 或指定为负值,则读取整个文件。

# 打开文件并读取内容
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

在上述代码中, example.txt 是文件名, encoding='utf-8' 确保在读取时正确处理Unicode字符。使用 with 语句可以自动管理文件的打开和关闭。

4.1.2 读取大文件的策略与技巧

当文件内容非常大时,一次性读取整个文件可能会消耗大量内存资源,甚至导致程序崩溃。为了有效读取大文件,可以采用分块读取的方式:

chunk_size = 1024  # 每次读取1024字节

with open('large_file.txt', 'r', encoding='utf-8') as file:
    while True:
        chunk = file.read(chunk_size)
        if not chunk:
            break
        print(chunk)

这段代码通过循环分批次读取文件内容,每次读取 chunk_size 字节,直到文件结束。

4.2 使用readline()和readlines()读取文件

4.2.1 readline()和readlines()的区别与选择

除了 read() 方法,Python文件对象还提供了 readline() readlines() 两个方法,用于逐行或逐段读取文件内容。

  • readline() 方法返回文件的下一行,包括行尾的换行符。
  • readlines() 方法则读取文件所有行,将它们作为字符串列表返回。

选择哪个方法取决于具体的应用场景。如果需要逐行处理, readline() 会更方便。如果需要一次性处理整个文件的所有行, readlines() 更合适。

4.2.2 逐行读取文本文件的实践应用

逐行读取允许我们对文件的每一行进行操作,这对于文本分析、数据处理等任务非常有用。

with open('text_file.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())  # 使用strip()去除每行末尾的换行符

在这段代码中,我们通过 for 循环和 readline() 方法逐行读取文件。使用 strip() 方法去除每行末尾的换行符 \n

4.3 文件内容的搜索与定位

4.3.1 文件指针的移动与定位

在Python文件操作中, seek(offset[, whence]) 方法可以用来改变文件指针的位置。 offset 是偏移量,而 whence 可以是 0 (文件开头), 1 (当前位置),或 2 (文件末尾)。

with open('example.txt', 'r+', encoding='utf-8') as file:
    file.seek(0)  # 移动指针到文件开头
    content = file.read()
    print(content)

在这段代码中,我们首先打开文件并读取内容。然后使用 seek(0) 将文件指针移动到文件开头,并再次读取内容。

4.3.2 搜索特定内容并读取的实现方法

有时我们需要搜索文件中的特定内容,并读取相关数据。下面的代码段展示了如何实现这一需求:

def search_file_content(filename, search_string):
    with open(filename, 'r', encoding='utf-8') as file:
        found = False
        position = 0
        while True:
            line = file.readline()
            if not line:
                break
            if search_string in line:
                found = True
                print(f"Found '{search_string}' at line {position + 1}")
            position += 1

# 使用函数搜索文件中的字符串
search_file_content('example.txt', '特定字符串')

这段代码定义了一个函数 search_file_content ,它接受文件名和要搜索的字符串作为参数,然后逐行搜索该字符串。如果找到匹配的内容,就输出该字符串所在行的位置。

通过本章节的介绍,我们已经了解了如何在Python中高效地读取TXT文件。下面的章节将继续介绍文件操作中的高级技巧。

5. 使用Python的open()函数进行高级文件操作

5.1 open()函数的高级用法

5.1.1 上下文管理器的使用

在Python中, open() 函数是文件操作的核心。除了基本的打开文件,还可以利用上下文管理器来自动管理文件的打开和关闭,这可以显著简化代码并避免因忘记调用 close() 而产生的资源泄露问题。

上下文管理器通过 with 语句实现。当离开 with 块时,上下文管理器会自动调用 __exit__() 方法来关闭文件。

下面是一个例子:

# 使用上下文管理器打开文件
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

在这个例子中,文件 example.txt 被打开,并且内容读取到变量 content 中。当我们离开 with 块时,文件会自动关闭,即使在读取文件时发生异常也是如此。

5.1.2 文件编码的处理与注意事项

文件编码指的是计算机存储文本时所使用的字符编码方式。在处理文件时,错误的编码方式会导致乱码。 open() 函数允许我们指定文件的编码方式,这在处理跨平台或跨语言的文本时尤为重要。

# 使用open()函数指定文件编码
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

在这个例子中,我们指定文件编码为 utf-8 ,这是互联网上最常用的编码方式,可以处理包含大量特殊字符的文本文件。

5.2 处理文件的异常情况

5.2.1 文件操作中可能出现的异常

文件操作中可能出现的异常主要有以下几种:

  • FileNotFoundError :当尝试打开不存在的文件时抛出。
  • IOError :当发生I/O错误(例如,磁盘空间不足)时抛出。
  • PermissionError :当没有权限访问文件时抛出。

这些异常需要被适当捕获和处理,以确保程序的健壮性。

5.2.2 异常捕获与处理的方法

捕获异常可以使用 try ... except 语句块。 try 块内放置可能抛出异常的代码,而 except 块内放置处理异常的代码。

下面是一个异常处理的例子:

try:
    with open('example.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在,请确认文件路径是否正确")
except IOError:
    print("读取文件时发生I/O错误,请检查磁盘空间")
except Exception as e:
    print(f"发生错误:{e}")

在这个例子中,我们捕获了 FileNotFoundError IOError 以及其他可能的异常。这样的结构可以确保程序在遇到异常时不会崩溃,而是在输出错误信息后继续运行。

6. 'w'模式与文件写入

6.1 'w'模式的行为与特点

6.1.1 'w'模式下文件内容的覆盖机制

在Python中,使用 open() 函数打开一个文件时,可以指定模式参数。当使用 'w' 模式时,如果文件已存在,则会被覆盖,即文件内容会被新的写入内容所替代。如果文件不存在, 'w' 模式会创建一个新文件。这种方式在处理需要更新文件内容的场景时非常有用。

在实际操作中,理解覆盖机制背后的细节非常重要,尤其是当你不小心使用 'w' 模式打开并写入一个意料之外的重要文件时,可能会造成不可逆的数据丢失。

# 示例代码:展示使用 'w' 模式覆盖文件内容的行为
file_path = 'example.txt'

# 写入第一次内容
with open(file_path, 'w') as file:
    file.write('这是第一次写入的内容。\n')

# 使用 'w' 模式再次打开文件,并写入第二次内容
with open(file_path, 'w') as file:
    file.write('这是第二次覆盖写入的内容。\n')

# 读取文件并显示结果
with open(file_path, 'r') as file:
    content = file.read()
print(content)

上述代码首先创建了一个名为 example.txt 的文件,并写入了第一次内容。接着,使用 'w' 模式打开同一个文件,并写入了第二次内容,这导致了第一次的内容被覆盖。

6.1.2 文件不存在时的行为分析

当使用 'w' 模式打开一个不存在的文件时,Python会自动创建这个文件。这是一个很方便的功能,特别是在需要创建新文件进行写入操作时。然而,这同样是一个需要谨慎使用的情况,因为在不经意间可能会覆盖掉其他重要的文件。

需要注意的是, 'w' 模式下创建的文件是空的,这意味着之前该路径上的任何旧文件都将不复存在。在涉及到文件操作的脚本和程序中,合理地使用异常处理和文件路径验证可以有效预防不必要的数据丢失。

# 示例代码:展示使用 'w' 模式创建新文件的行为
file_path = 'new_example.txt'

try:
    # 尝试打开文件,如果文件不存在,将抛出FileNotFoundError
    with open(file_path, 'w') as file:
        file.write('这是新创建的文件内容。\n')
except FileNotFoundError:
    print(f"文件 {file_path} 不存在,将创建一个新文件。")

# 读取文件并显示结果
with open(file_path, 'r') as file:
    content = file.read()
print(content)

在这个示例中,如果 new_example.txt 文件不存在,代码将会创建这个文件并写入内容。通过异常处理,我们可以避免程序在尝试打开不存在的文件时中断,并且给用户相应的提示信息。

6.2 'w'模式下的数据写入实践

6.2.1 文本数据的写入流程

使用 'w' 模式向文件写入文本数据是一个非常基本且常见的操作。从编程的角度来看,可以总结为以下几个步骤:

  1. 使用 open() 函数以 'w' 模式打开文件,如果文件不存在,将创建一个新文件。
  2. 使用 write() 方法将文本数据写入文件。
  3. 关闭文件,确保所有数据被正确写入。

下面是一个简单的代码示例:

# 示例代码:展示向文件写入文本数据的流程
file_path = 'text_data.txt'

# 创建并写入文本数据
with open(file_path, 'w') as file:
    # 写入多行文本
    file.write('第一行文本\n')
    file.write('第二行文本\n')

# 确认文件写入完成
print(f"文本数据已写入文件 {file_path}")

6.2.2 二进制数据的写入流程

与文本数据写入类似,二进制数据的写入也是通过 open() 函数和 write() 方法来完成。不过在打开文件时,需要指定 'wb' 模式,其中 'b' 代表binary,表示以二进制形式打开文件。

二进制数据写入的步骤为:

  1. 使用 open() 函数以 'wb' 模式打开文件,如果文件不存在,将创建一个新文件。
  2. 使用 write() 方法将二进制数据写入文件。
  3. 关闭文件,确保所有数据被正确写入。

下面是一个写入二进制数据的示例代码:

# 示例代码:展示向文件写入二进制数据的流程
file_path = 'binary_data.bin'

# 创建并写入二进制数据
with open(file_path, 'wb') as file:
    # 创建一个二进制数据块
    binary_data = bytes('这是一段二进制数据', 'utf-8')
    file.write(binary_data)

# 确认文件写入完成
print(f"二进制数据已写入文件 {file_path}")

在上述代码中,首先将一个字符串编码成二进制数据,然后以二进制形式写入文件。这种写入方式特别适用于处理非文本文件,如图片、音频、视频等媒体文件。

7. 'a'模式与'w'模式的区别及应用

文件操作在编程中是基本而频繁的任务,特别是在数据处理和日志记录中。在Python中,文件打开模式决定了文件处理的很多行为。本章重点探讨'a'模式(追加模式)和'w'模式(写入模式)的区别及其应用场合。

7.1 'a'模式的行为与特点

'a'模式下,任何写入操作都会将内容添加到文件的末尾。如果文件不存在,则Python会自动创建一个新文件。

7.1.1 'a'模式下的文件追加机制

在'a'模式下,文件指针初始位置在文件末尾,写入的数据会被追加到现有数据之后。这种方式非常适合日志文件的写入,因为日志文件经常需要向末尾添加新的条目,而不会覆盖已有内容。

7.1.2 文件不存在时的行为分析

如果指定的文件不存在,Python会在进行写入操作前创建一个新文件。这与'w'模式不同,后者在文件不存在时也会创建一个新文件,但会在写入内容前清空文件。

7.2 'a'模式与'w'模式的比较

'a'模式和'w'模式都用于写入文件,但它们的行为和用途有着明显的差异。

7.2.1 选择'a'或'w'模式的场景分析

选择哪种模式,主要取决于你的具体需求:

  • 如果你想要保留文件中的现有内容,并在其末尾追加新内容,应该使用'a'模式。
  • 如果你需要在写入时覆盖文件内容,或者文件不存在需要创建新文件,那么应该使用'w'模式。

7.2.2 避免常见错误的策略

在选择模式时容易犯的错误是混淆'a'和'w'模式的行为,尤其是当文件已存在时。为了避免错误,一定要确认你的需求是否需要保留原文件内容。

# 示例代码:演示'a'模式和'w'模式的差异
filename = 'test.txt'

# 'w'模式会覆盖原有内容
with open(filename, 'w') as file:
    file.write('Hello, World!')

# 'a'模式会保留原有内容并追加新内容
with open(filename, 'a') as file:
    file.write('\nAppend this line')

# 结果将是 'Hello, World!\nAppend this line'

通过上述代码,我们可以清晰地看到在'a'模式和'w'模式下文件内容的变化,进而根据实际需求选择合适的模式进行文件操作。在实际应用中,选择正确的模式能够确保数据的安全和程序的稳定运行。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:在IT领域,文本处理是基础且重要的一环,而创建和操作TXT文档是最基本的任务之一。本文主要探讨如何使用Python编程语言进行TXT文件的创建和内容写入,并展示如何打开和读取这些内容。本文以Python为例,由于其简洁易懂的语法,是学习文件操作的理想语言。TXT文件作为纯文本格式,广泛用于数据交换和日志记录等场景。通过使用Python内置的 open() 函数,我们可以轻松创建TXT文件,使用'w'模式进行写入,'a'模式进行内容追加,以及'r'模式进行读取。文章还涉及到如何处理用户交互,例如在Tkinter图形用户界面(GUI)中添加按钮触发文件操作。这些基础文件操作技能对于学习更高级的数据管理和文件处理至关重要。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值