Python项目开发教程 课件 第十章 文件及目录操作_第1页
Python项目开发教程 课件 第十章 文件及目录操作_第2页
Python项目开发教程 课件 第十章 文件及目录操作_第3页
Python项目开发教程 课件 第十章 文件及目录操作_第4页
Python项目开发教程 课件 第十章 文件及目录操作_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章文件及目录操作Python项目开发实用教程本章导读文件与目录操作是Python编程中连接数据存储与程序逻辑的核心桥梁,是开发者必备技能。01.基础文件操作通过open()函数实现文本/二进制文件的创建、读取、写入、关闭,掌握文件操作的基本流程。02.目录操作(os模块)基于os模块实现目录的判断、创建、查看、切换,管理文件系统的组织结构。03.高级操作(os+shutil)深入路径处理、目录树遍历,掌握文件/文件夹的复制、移动、重命名及删除等高级功能。04.项目实践:文件管理系统综合运用所学操作,实现一个简易的系统文件与目录管理系统,巩固实战能力。10.1基本文件操作核心机制:文件系统交互的基石基本文件操作是程序与存储系统交互的基础,所有高级文件处理均建立在此之上。理解底层机制是掌握后续进阶功能的前提。创建与打开(open)核心函数:open()负责建立程序与文件的连接,支持创建新文件或打开已有文件。内容读写(Read/Write)核心操作:数据交换实现内存数据与磁盘文件的双向传输,掌握不同场景下的读写策略。关闭与释放(Close)核心目的:资源回收操作完成后必须关闭文件句柄,确保数据落盘并释放系统资源。10.1.1创建、打开和关闭文件——open()函数语法PythonSyntaxfile=open(filename,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)filename(文件名)指定要操作的文件路径,可以是相对路径或绝对路径。这是唯一的必选参数。mode(模式)决定文件的打开方式,如只读('r')、写入('w')、追加('a')等。默认值为只读模式。10.1.1创建、打开和关闭文件——核心参数说明filename(文件名)指定要创建或打开的文件名称。

同目录:直接写文件名不同目录:需写绝对路径mode(打开模式)决定文件的打开方式,是最核心的参数。

默认值:只读模式'r'其他:'w'写入,'a'追加等buffering(缓冲)控制缓冲区大小,优化读写性能。

-1:自动设置缓冲区(4/8KB)0:关闭缓冲区,直接写入10.1.1创建、打开和关闭文件——其他参数说明encoding(编码方式)指定文件的编码格式,推荐使用'utf-8'以保证跨平台兼容性。errors(错误处理)指定编码错误时的处理策略,例如忽略错误或抛出异常,用于容错处理。newline(换行符控制)控制换行符的转换规则,自动适配Windows和Unix系统的换行格式差异。closefd(文件描述符)默认值为True,表示关闭文件时同时关闭底层的文件描述符,防止资源泄漏。opener(自定义打开器)允许指定一个自定义的打开函数,用于处理特殊文件(如管道、套接字)的打开场景。10.1.1创建、打开和关闭文件——mode常用模式(文本/二进制)模式(Mode)功能说明适用文件类型'r'只读模式,文件必须存在,否则报错。文本文件'rb'只读模式,文件必须存在,否则报错。二进制文件'w'写入模式,若文件存在则覆盖,不存在则新建。文本文件'wb'写入模式,若文件存在则覆盖,不存在则新建。二进制文件'a'追加模式,在文件末尾写入,不存在则新建。文本文件提示:'b'代表二进制模式,通常用于处理图片、视频、音频等非文本文件。10.1.1创建、打开和关闭文件——mode读写混合模式模式标识功能说明文件存在性要求'r+'读写模式,文件指针在开头,可读可写文件必须存在,否则报错'w+'读写模式,打开时清空原有内容,覆盖写入存在则覆盖,不存在则新建'a+'读写追加模式,文件指针在末尾,可读可写不存在则新建,存在则追加'ab'二进制追加模式,仅写入,文件指针在末尾适用于二进制文件(如图片、视频)注意:在使用'r+'模式时,如果文件不存在会抛出IOError;而'w+'模式会清空文件内容,使用时需谨慎。10.1.1创建、打开和关闭文件——创建/写入文件示例Python代码实现#创建并写入文件(w模式,覆盖原有内容)file=open('xyz.txt','w')file.write('第一次写入')file.close()

#追加写入文件(a+模式,末尾添加)file=open('xyz.txt','a+')file.write('第二次追加写入')file.close()覆盖模式('w')使用'w'模式打开文件时,如果文件已存在,原有内容将被清空并覆盖;如果文件不存在,则创建新文件。追加模式('a+')使用'a+'模式打开文件时,写入的内容会追加到文件末尾,不会覆盖原有内容。若文件不存在则创建。10.1.1创建、打开和关闭文件——关闭文件Python语法示例#假设file是已打开的文件对象file.close()核心意义与作用释放系统资源文件句柄是有限的系统资源,及时关闭可避免资源泄漏,防止程序崩溃。确保数据持久化强制将缓冲区中的数据写入磁盘,防止因程序异常退出导致数据丢失。解除文件锁定关闭文件句柄可解除操作系统对文件的锁定,允许其他程序或进程访问该文件。10.1.2读取文件内容——file.read([number])功能说明核心功能:读取文件中指定字符数的内容。参数说明:number为可选参数。指定数字:读取对应字符数不写参数:读取全部内容代码示例(Python)#写入文件内容file=open('xyz.txt','w')file.write('第一次写入的内容。')file=open('xyz.txt','a+')file.write('第二次追加写入的内容。')#读取前8个字符print(file.read(8))执行结果输出:第一次写入的内容。10.1.2读取文件内容——file.readline()功能解析逐行读取:每次调用仅读取文件中的一行内容。保留换行符:返回的字符串包含行尾的换行符'\n'。内存友好:适合处理大型文件,无需一次性加载全部内容。代码示例#写入两行测试内容file=open('test.txt','w')file.write('第一次写入的内容。')file.write('\\n第二次追加写入的内容。')file.close()file=open('test.txt','r')print(file.readline())#仅读取第一行执行结果输出:第一次写入的内容。10.1.2读取文件内容——file.readlines()功能描述:按行全部读取文件内容,返回一个列表,列表中的每个元素对应文件的一行文本。Python代码示例#写入带换行的内容file=open('test.txt','w')file.write('第一次写入的内容。')file=open('test.txt','a+')file.write('\n第二次追加写入的内容。')file.close()#重新以只读模式打开并读取file=open('test.txt','r')print(file.readlines())执行结果:['第一次写入的内容。\n','第二次追加写入的内容。']10.1.2读取文件内容——核心注意事项确保文件状态读取操作前,必须保证文件处于打开状态。若尝试读取未打开的文件句柄,程序会立即抛出异常。模式与刷新使用readlines()时建议用'r'/'r+'模式。若为刚写入的文件,需先执行close()刷新缓冲区,再以读模式重新打开。大文件内存优化避免直接使用read()一次性加载全部内容。推荐使用readline()逐行读取,显著降低内存占用,防止内存溢出。10.1.2读取文件内容——file.flush()核心功能解析强制刷新缓冲区,将缓冲区中的数据立即写入磁盘,无需等待close()方法调用。典型适用场景适用于需要实时写入数据的场景(如日志记录),防止程序意外崩溃导致数据丢失。代码示例f=open("myfile.txt","a")f.write("Nowthefilehasonemoreline!")f.flush()#立即写入磁盘,不等待closef.write("...andanotherone!")f.close()10.1.2读取文件内容——file.seek(index)核心功能移动文件指针到指定索引位置,后续读取操作将从该位置开始。注意:写入操作通常始终从文件末尾开始,不受此指针位置影响。参数解析index(整数)代表文件指针的偏移量,单位为字节(Byte)。例如:index=0表示文件开头;index=10表示从文件起始位置向后偏移10个字节。关键要点文件指针默认在文件开头(index=0)。常规的读取操作会自动移动指针,而seek()方法允许我们手动重置指针位置,实现随机访问。10.1.3写入文件内容——写入前模式设定追加模式(Append)mode='a'/'a+'保留原文件内容,新写入的内容将追加到文件末尾。覆盖模式(Write)mode='w'/'w+'删除原文件内容,新内容完全覆盖原有内容。注意数据丢失风险。注意事项:若文件不存在,无论使用'a'模式还是'w'模式,系统都会自动创建该文件。10.1.3写入文件内容——file.write()功能描述核心作用:向文件中写入指定字符串内容。返回值:返回成功写入的字符数。注意事项:使用'w'模式会覆盖原有内容,使用'a'模式则追加内容。Python代码示例#追加写入文件f=open("demofile2.txt","a")f.write("Nowthefilehasmorecontent!")f.close()#读取验证f=open("demofile2.txt","r")print(f.read())f.close()执行结果输出:Nowthefilehasmorecontent!10.1.3写入文件内容——file.writelines()功能特性写入对象:字符串序列(如列表、元组等可迭代对象)。核心特点:不会自动添加换行符(\n),所有字符串会直接拼接。使用场景:适合一次性写入大量数据,效率较高。代码示例与执行结果#写入字符串列表obj=open("new.py","w")listx=["l1","test","hello","66"]obj.writelines(listx)obj.close()执行结果(new.py文件内容):l1testhello6610.1.3写入文件内容——writelines()核心注意事项无自动换行功能writelines()不会自动添加换行符。如需换行,必须在序列元素中手动添加转义字符\n。listx=["l1\n","test\n","hello\n"]必须是字符串序列写入的序列元素必须是字符串类型。如果传入整数或数字序列,程序会直接抛出TypeError。nums=[1,2,3]#错误示例:非字符串f.writelines(nums)支持任意可迭代对象不仅限于列表,还可以接受任何可迭代的字符串对象,如元组、字符串生成器等。tpl=("a","b")#正确示例:元组f.writelines(tpl)10.2目录操作目录操作通过Python内置os模块实现,是管理文件系统目录的核心手段。判断目录/文件是否存在检查路径有效性,避免操作错误创建单级/多级目录快速构建文件夹结构,支持递归创建查看目录下的文件和子目录遍历目录内容,获取文件列表信息更改当前操作目录切换工作路径,方便后续相对路径操作前置操作:使用os模块前,请确保已导入模块importos10.2.1判断目录是否存在——os.path.exists(path)功能描述用于判断指定路径(文件或目录)是否存在。若存在返回True,不存在返回False。这是文件操作中最基础且常用的检查手段。参数说明path:待判断的路径字符串。可以是相对路径(如'./test.txt')或绝对路径(如'/home/user/test.txt')。代码示例importos#判断文件/目录是否存在ifos.path.exists('test.txt'):print('该路径已存在')else:print('该路径不存在')执行结果假设当前目录下存在'test.txt'文件,输出结果为:>该路径已存在10.2.2创建目录——os.mkdir(path)(单级目录)功能与参数说明核心功能:创建单级目录。若父目录不存在,会抛出异常,因此使用前建议检查。参数说明:path为要创建的目录名,支持相对路径或绝对路径字符串。执行结果:若目录不存在,输出"创建完成";若已存在,输出"目录已存在"。Python代码示例#导入os模块importos#判断并创建单级目录ifnotos.path.exists('一级目录'):os.mkdir('一级目录')print('创建完成')else:print('目录已存在')10.2.2创建目录——os.makedirs(path)(多级目录)核心功能说明多级创建:一次性创建所有不存在的目录层级,无需手动逐级mkdir。自动补全:自动识别并创建路径中缺失的父目录,操作更高效。Python代码示例importos#获取当前工作目录now=os.getcwd()#创建多级目录结构os.makedirs('one/kiki/zizi')执行结果:目录创建成功,生成结构:one/kiki/zizi10.2.3查看目录内容——os.listdir(path)功能说明返回指定路径下所有文件和子目录名的字符串列表,无层级区分。参数说明path:待查看的目录路径。默认值为当前目录(path='.')。代码示例:创建空目录并查看importosos.mkdir("e:\\mydir")print(os.listdir("e:\\mydir"))执行结果[](空列表,因为目录刚创建为空)10.2.3查看目录内容——os.listdir(path)示例2示例2:创建子目录并查看importosos.mkdir("e:\\mydir\\newdir")print(os.listdir("e:\\mydir"))执行结果:['newdir']示例3:创建子目录+文件并查看importosos.mkdir("e:\\mydir\\newdir")#创建文件并写入内容f=open("e:\\mydir\\xy.txt","w")f.write("ABC...")f.close()print(os.listdir("e:\\mydir"))执行结果:['newdir','xy.txt']10.2.4更改当前目录——os.chdir(path)功能说明切换当前Python程序的工作目录到指定路径。切换后,后续的文件操作将默认基于此新目录,无需重复输入长路径。核心价值简化代码结构,减少重复输入绝对路径的冗余,提升代码的可读性和维护性。代码示例importos#切换到指定目录os.chdir("e:\\mydir")#查看当前目录下的内容print(os.listdir("."))执行结果['newdir','xy.txt']10.3高级操作高级操作是文件与目录管理的进阶应用,结合os模块和shutil模块实现复杂的文件系统管理需求。路径操作获取路径属性、检查路径有效性,确保操作的准确性。目录树遍历&文件大小使用os.walk()遍历目录树,os.path.getsize()查看文件大小。文件与文件夹操作实现文件/文件夹的复制、移动及重命名功能。删除操作处理空目录、非空目录及文件的删除逻辑。前置操作:使用shutil模块前,请确保已导入模块:importshutil10.3.1路径操作——获取文件夹和文件路径核心函数(os.path模块)os.path.dirname(path)返回路径中的目录部分,即去除文件名后的路径字符串。os.path.basename(path)返回路径中的文件名部分,包含扩展名。os.path.split(path)将路径分割为目录和文件名,返回一个元组(目录路径,文件名)。代码示例演示importoshp="e:\\mydir\\xy.txt"print(os.path.dirname(hp))#输出:e:\mydirprint(os.path.basename(hp))#输出:xy.txtprint(os.path.split(hp))#输出:('e:\\mydir','xy.txt')10.3.1路径操作——分割路径为各级目录/文件核心方法与代码示例使用字符串split()方法,配合os.path.sep系统分隔符。importoshp="e:\\mydir\\xy.txt"#分割为各级目录/文件print(hp.split(os.path.sep))执行结果与核心说明输出结果:['e:','mydir','xy.txt']自动适配系统分隔符os.path.sep会根据运行环境自动切换:Windows为反斜杠(\),Linux/Mac为斜杠(/)。跨平台开发首选优先使用该方法构建路径,避免因手动输入分隔符导致的兼容性错误。10.3.1路径操作——检查路径有效性操作路径前先验证有效性,避免程序抛出异常,以下三个函数互补使用:os.path.exists(path)检查路径(文件或目录)是否存在。存在返回True,否则返回False。os.path.isfile(path)检查路径是否存在且为文件。是文件返回True,否则返回False。os.path.isdir(path)检查路径是否存在且为目录。是目录返回True,否则返回False。Python代码示例importoshp="e:\\mydir\\xy.txt"print(os.path.exists(hp))#Trueprint(os.path.isfile(hp))#Trueprint(os.path.isdir(hp))#False10.3.2遍历目录树及查看文件大小——os.walk(path)核心功能与参数功能:递归遍历指定目录的整个目录树,返回三元组迭代器:(当前目录路径,子目录列表,文件列表)参数:path为待遍历的根目录路径关键特性说明os.walk()是深度优先的递归遍历,能够获取所有层级的子目录和文件信息。这种特性使其非常适合需要批量处理目录下所有文件的场景,例如批量重命名、批量复制或统计文件大小。代码示例:遍历目录树并打印信息10.3.2遍历目录树及查看文件大小——os.path.getsize(path)功能描述返回指定文件的大小,单位为字节(Bytes)注意:该函数无法直接统计目录的大小,需配合遍历实现核心逻辑统计目录总大小需要遍历目录下的所有文件通过循环累加每个文件的大小得到总和代码示例:统计目录总大小importossize=0#切换到目标目录os.chdir("e:\\mydir")#遍历并累加文件大小forfilenameinos.listdir(os.getcwd()):size+=os.path.getsize(filename)#打印总大小print(f"目录总大小:{size}字节")10.3.3文件及文件夹的复制、移动及重命名——复制(shutil模块)复制单个文件:shutil.copy()用于复制单个文件到指定路径。若目标路径是文件名,则会在复制的同时进行重命名。复制文件夹:shutil.copytree()递归地复制整个文件夹目录树,包括其中的所有子目录和文件。目标目录必须不存在。代码示例(Python)#导入模块importshutil#1.复制整个文件夹(含子目录)shutil.copytree("e:\\mydir","e:\\otherdir")

#2.复制单个文件到目标文件夹shutil.copy("e:\\mydir\\xy.txt","e:\\otherdir")#3.复制文件并同时重命名shutil.copy("e:\\mydir\\xy.txt","e:\\otherdir\\hello.txt")10.3.3复制、移动及重命名——复制操作注意事项shutil.copy()参数destination的两种情况传文件夹路径:文件将复制到该文件夹内,保留原文件名传带文件名的路径:复制文件并重命名为指定文件名shutil.copytree()目录存在性限制目标目录destination不能提前存在,否则会抛出异常复制操作的本质特性操作会保留原文件/文件夹,并在目标位置生成一个全新的副本10.3.3文件及文件夹的复制、移动及重命名——移动(shutil.move())功能说明将文件或文件夹移动到指定路径。其用法与shutil.copy()基本一致,支持直接移动或移动并重命名。核心区别不同于复制操作,shutil.move()执行后不保留原文件/文件夹,仅进行位置迁移,类似于系统的“剪切-粘贴”操作。代码示例importshutil#移动文件到目标文件夹shutil.move("e:\\mydir\\xy.txt","e:\\otherdir")#移动文件并改名shutil.move("e:\\mydir\\xy.txt","e:\\otherdir\\new_xy.txt")10.3.3复制、移动及重命名——移动操作注意事项路径合法性校验源路径(source)和目标路径(destination)必须存在,否则系统会抛出异常错误,操作失败。覆盖风险警告若目标路径存在同名文件或文件夹,移动操作会直接覆盖原有内容,且无任何提示,请务必谨慎操作。跨磁盘移动限制支持跨磁盘移动操作,但部分系统对文件夹的跨盘移动支持有限,可能需要额外的权限或特定的处理方式。操作本质原理移动操作的本质并非单纯的位置变更,而是先将文件复制到目标位置,然后删除原路径下的文件或文件夹。10.3.3文件及文件夹的复制、移动及重命名——重命名(os.rename())功能描述对文件或文件夹进行重命名操作。通过指定不同的目标路径,可实现简单的位置移动。核心特性重命名是轻量级操作,仅修改文件/目录名。不复制文件内容,效率极高。代码示例(Python)importos#对文件重命名(同目录)os.rename("e:\\mydir\\xy.txt","e:\\mydir\\lala.txt")#重命名同时移动位置os.rename("e:\\mydir\\lala.txt","e:\\otherdir\\new_lala.txt")10.3.4删除文件及文件夹——os模块(删除文件/空目录)删除单个文件函数:os.remove(path)/os.unlink(path)说明:两者功能完全一致,用于删除指定路径的文件。删除空目录函数:os.rmdir(path)说明:仅能删除空目录,若目录非空则抛出异常。核心限制注意:os.rmdir()无法直接删除非空目录。必须先删除目录内部的所有文件和子目录,使其变为空目录后才能删除。代码示例(Python)importos#删除文件os.remove("e:\\mydir\\xy.txt")print(os.path.exists("e:\\mydir\\xy.txt"))#False#删除空目录os.rmdir("e:\\mydir")print(os.path.exists("e:\\mydir"))#False10.3.4删除文件及文件夹——shutil模块(删除非空目录)Python代码示例#导入必要的模块importshutilimportos#递归删除非空目录,包含所有文件和子目录shutil.rmtree("e:\\mydir")#验证删除结果print(os.path.exists("e:\\mydir"))#输出:False核心函数:shutil.rmtree(path)功能:递归删除整个文件夹,包含其中的所有文件、子目录,无空目录限制。⚠️重要注意事项操作不可逆:删除后无法恢复,使用前务必做路径验证。安全建议:配合os.path.exists()和os.path.isdir()使用,防止误删系统文件。本章小结——一、基本文件操作创建与管理核心函数:open()模式参数:mode指定读写方式资源释放:操作完成后必须调用close()读取内容方法read([n]):读取n个字符或全部readline():逐行读取readlines():按行读取返回列表flush()/seek():刷新缓存与指针移动写入内容方法write():写入单个字符串writelines():写入序列,无自动换行核心模式:'w':覆盖写入(创建新文件)'a':追加写入(保留原有内容)本章小结——二、目录操作(os模块)判断存在os.path.exists(path)判断指定路径下的文件或目录是否存在,返回布尔值。创建目录os.mkdir(path):创建单级目录os.makedirs(path):创建多级目录查看内容os.listdir(path)返回指定目录下的所有文件和子目录名称组成的字符串列表。切换目录os.chdir(path)更改当前工作目录到指定路径,相当于终端的cd命令。本章小结——三、高级操作(os+shutil模块)路径操作与验证解析属性:dirname()/basename()/split()类型验证:isfile()/isdir()目录遍历与统计递归遍历:os.walk()遍历目录树大小统计:getsize()获取文件大小并累加复制与移动操作复制:shutil.copy()/copytree()移动:shutil.move()(不保留原内容)重命名与删除操作重命名:os.rename()(简单移动)删除:remove()/rmdir()(空目录)递归删除:shutil.rmtree()(非空目录)项目实践:系统文件与目录管理系统——一、项目分析功能需求分析文件操作创建、写入、读取、追加、覆盖、删除目录操作创建、判断存在、遍历内容、重命名、删除高级功能文件大小统计、目录树遍历、文件复制与移动核心技术选型基础文件操作使用Python内置open()函数进行读写目录与路径管理利用os模块处理路径拼接、判断存在性等高级文件操作借助shutil模块实现复制、移动及非空目录删除项目架构设计模块化设计分为文件操作模块和目录操作模块,各模块封装独立功能函数,降低耦合度。主程序交互主程序提供菜单选择界面,根据用户输入调用不同模块的功能,实现交互逻辑。项目实践——二、文件操作模块(1)文件创建与写入(Create&Write)defcreate_and_write_file(filename,content,mode='w'):"""创建/打开文件并写入内容,支持覆盖/追加"""withopen(filename,mode,encoding='utf-8')asfile:file.write(content)print(f"文件{filename}已成功写入")文件读取与异常处理(Read&Handle)defread_file(filename):"""读取文件内容,包含异常处理"""try:withopen(filename,'r',encoding='utf-8')asf:content=f.read()print(f"内容:\n{content}")exceptFileNotFoundError:print(f"文件{filename}不存在!")项目实践——二、文件操作模块(2)-文件删除核心实现代码(Python)importos#3.文件删除功能实现defdelete_file(filename):"""删除指定文件,包含存在性检查"""ifos.path.exists(filename):os.remove(filename)print(f"文件{filename}已成功删除。")else:print(f"文件{filename}不存在!")模块测试流程#1.创建并写入初始内容create_and_write_file('test.txt','Hello','w')#2.追加内容create_and_write_file('test.txt','\nAppend','a')#3.读取文件内容read_file('test.txt')#4.执行删除操作delete_file('test.txt')项目实践——三、目录操作模块(1)-创建、遍历创建目录(CreateDirectory)#1.创建单级/多级目录importosdefcreate_directory(path):"""创建目录,若不存在则创建"""ifnotos.path.exists(path):os.makedirs(path)print(f"目录{path}已成功创建")else:print(f"目录{path}已存在!")遍历目录内容(ListContents)#2.遍历目录内容并打印deflist_directory_contents(path):try:contents=os.listdir(path)foritemincontents:print(f"-{item}")exceptFileNotFoundError:print(f"目录{path}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论