Python文件操作大全

发布时间:2026/9/25 8:20:29

Python文件操作大全 1 文件操作1.1 文件打开与关闭1.1.1 打开文件在Python中你可以使用open()函数来打开文件。以下是一个简单的例子# 打开文件默认为只读模式 file_path example.txt with open(file_path, r) as file: # 执行文件操作例如读取文件内容 file_content file.read() print(file_content) # 文件在with块结束后会自动关闭无需显式关闭文件在上述示例中example.txt 是文件的路径和名称你可以根据实际情况修改为你想要打开的文件。r 表示只读模式。如果你想要写入文件可以使用 w 模式如果想要追加内容可以使用 a 模式等。with open(...) as file : 是使用上下文管理器的方式确保文件在使用后被正确关闭即使在处理文件时发生异常也能保证关闭。1.1.2 关闭文件在 Python 中关闭文件有两种主要的方法1. 使用 with 语句with语句是一种上下文管理器当它的代码块执行完毕时会自动关闭文件。这是推荐的方式因为它确保文件在使用完毕后被正确关闭即使发生异常也能保证关闭。file_path example.txt with open(file_path, r) as file: # 执行文件操作例如读取文件内容 file_content file.read() print(file_content) # 文件在这里已经被自动关闭2. 使用 close() 方法你可以显式调用文件对象的close()方法来关闭文件。这种方法适用于一些特殊情况但相对来说不如with语句简洁和安全。file_path example.txt file open(file_path, r) try: # 执行文件操作例如读取文件内容 file_content file.read() print(file_content) finally: file.close()在使用with语句时不需要显式调用close()方法。如果你在代码中打开了文件而没有使用with请确保在适当的地方调用close()以关闭文件以避免资源泄漏。1.2 访问模式及说明2 文件读写2.1 写数据write写入数据通常涉及将信息保存到文件、数据库或其他持久性存储介质中。以下是一些常见的数据写入场景的示例1. 写入文本文件使用内置的open函数来打开文件并写入内容。确保使用适当的模式例如w表示写入。file_path example.txt # 写入文件 with open(file_path, w) as file: file.write(Hello, this is some data.)2. 写入CSV文件使用csv模块来写入CSV格式的文件。import csv csv_file_path example.csv data [[Name, Age, Occupation], [John Doe, 30, Engineer], [Jane Smith, 25, Designer]] with open(csv_file_path, w, newline) as csvfile: csv_writer csv.writer(csvfile) csv_writer.writerows(data)3. 写入JSON文件使用内置的json模块来写入JSON格式的文件。import json json_file_path example.json data {name: John Doe, age: 30, occupation: Engineer} with open(json_file_path, w) as jsonfile: json.dump(data, jsonfile)4. 写入数据库使用数据库连接库如sqlite3、mysql-connector-python等与相应的数据库进行交互。import sqlite3 # 连接到SQLite数据库假设有一个名为 example.db 的数据库 conn sqlite3.connect(example.db) # 创建一个游标对象 cursor conn.cursor() # 执行SQL插入语句 cursor.execute(INSERT INTO users (name, age, occupation) VALUES (?, ?, ?), (John Doe, 30, Engineer)) # 提交更改 conn.commit() # 关闭连接 conn.close()2.2 读数据read读取数据通常涉及从文件、数据库或其他存储介质中检索信息。以下是一些读取数据的常见示例1. 读取文本文件使用内置的open函数来打开文件并读取内容。file_path example.txt # 读取文件 with open(file_path, r) as file: data file.read() print(data)2. 读取CSV文件使用csv模块来读取CSV格式的文件。import csv csv_file_path example.csv # 读取CSV文件 with open(csv_file_path, r) as csvfile: csv_reader csv.reader(csvfile) for row in csv_reader: print(row)3. 读取JSON文件使用内置的json模块来读取JSON格式的文件。import json json_file_path example.json # 读取JSON文件 with open(json_file_path, r) as jsonfile: data json.load(jsonfile) print(data)4. 从数据库中读取数据使用数据库连接库如sqlite3、mysql-connector-python等与相应的数据库进行交互。import sqlite3 # 连接到SQLite数据库假设有一个名为 example.db 的数据库 conn sqlite3.connect(example.db) # 创建一个游标对象 cursor conn.cursor() # 执行SQL查询语句 cursor.execute(SELECT * FROM users) # 检索所有行 rows cursor.fetchall() # 打印每一行 for row in rows: print(row) # 关闭连接 conn.close()2.3 读数据readlinesreadlines是 Python 中用于读取文件的方法之一它用于逐行读取文件内容并将每一行作为字符串存储在一个列表中。下面是对readlines方法的详细解释使用 readlines 方法的基本语法with open(file.txt, r) as file: lines file.readlines()解释open(file.txt, r) : 打开文件 file.txt 以供读取。第一个参数是文件名第二个参数是打开文件的模式。r 表示只读模式。with ... as ... : 使用 with 语句可以确保在读取完成后自动关闭文件不需要显式调用 file.close()。lines file.readlines() : readlines 方法用于读取文件的所有行并将每一行作为一个字符串存储在列表 lines 中。每个列表元素对应文件中的一行文本。你可以使用列表索引来访问特定行例如 lines[0] 表示文件的第一行。例子假设 ‘file.txt’ 包含以下内容Hello, this is line 1. This is line 2. And this is line 3.使用 readlines 后with open(file.txt, r) as file: lines file.readlines() # lines 现在是一个包含每一行文本的列表 print(lines) # 输出 # [Hello, this is line 1.\n, This is line 2.\n, And this is line 3.\n] # 访问特定行 print(lines[0].strip()) # 输出Hello, this is line 1.注意事项每一行的末尾都包含换行符 \n你可以使用 strip() 方法去除这些额外的空白字符。readlines 方法适用于处理包含多行文本的文件但对于大型文件可能需要考虑逐行读取而不是将整个文件加载到内存中。这可以通过循环遍历文件对象来实现而不是使用 readlines。2.3 读数据readlinereadline 是 Python 中用于读取文件的方法之一它用于逐行读取文件内容并返回文件中的一行作为字符串。以下是对 readline 方法的详细解释使用 readline 方法的基本语法with open(file.txt, r) as file: line file.readline()解释open(file.txt, r) : 打开文件 file.txt 以供读取。第一个参数是文件名第二个参数是打开文件的模式。r 表示只读模式。with ... as ... : 使用 with 语句可以确保在读取完成后自动关闭文件不需要显式调用 file.close()。line file.readline() : readline 方法用于读取文件的一行并将该行作为一个字符串存储在变量 line 中。例子假设 ‘file.txt’ 包含以下内容Hello, this is line 1. This is line 2. And this is line 3.用 readline 后with open(file.txt, r) as file: line1 file.readline() line2 file.readline() line3 file.readline() print(line1) # 输出Hello, this is line 1. print(line2) # 输出This is line 2. print(line3) # 输出And this is line 3.注意事项每个 readline 调用都会读取文件的下一行。返回的字符串包含行末尾的换行符 \n。如果不需要换行符可以使用 strip() 方法去除它。当文件读取完毕后readline 将返回空字符串 ‘’因此可以在循环中使用 while line ! 来逐行读取整个文件。循环读取整个文件with open(file.txt, r) as file: line file.readline() while line ! : print(line.strip()) # 去除换行符 line file.readline()这个循环将逐行读取整个文件直到文件末尾。2.4 readlines 和 readline的区别readlines和readline是 Python 中用于读取文件的两种不同方法它们之间有一些重要的区别1. readlines 方法返回类型readlines方法返回一个包含文件所有行的列表其中每个元素都是文件中的一行文本字符串。使用情况 适用于处理包含多行文本的文件可以一次性将整个文件加载到内存中。这种方法适用于文件较小可以完全装入内存的情况。例子with open(file.txt, r) as file: lines file.readlines()2. readline 方法返回类型 readline 方法每次调用只返回文件中的一行作为字符串。如果再次调用将返回下一行。当文件读取完毕后返回空字符串 ‘’。使用情况 适用于逐行处理大型文件可以有效地降低内存使用。因为它一次只读取一行可以在循环中逐行处理文件而不必将整个文件加载到内存中。例子with open(file.txt, r) as file: line file.readline() while line ! : print(line.strip()) # 去除换行符 line file.readline()3. 区别总结readlines 一次性读取整个文件的所有行并返回一个包含所有行的列表。readline 逐行读取文件每次调用返回文件中的一行适用于处理大型文件减少内存占用。readlines 返回包含换行符的每一行而 readline 返回单独的行需要手动去除换行符。选择使用哪个方法取决于文件的大小和处理需求。如果文件较小可以完全装入内存使用 readlines如果文件较大可以逐行处理使用 readline。3 文件的相关操作3.1 文件重命名Python 文件重命名是文件管理中的一个基本操作可以通过 Python 的内置库来实现。以下是一个超详细的入门指南介绍如何使用 Python 重命名文件1. 导入必要的库首先您需要导入 Python 的os库它提供了许多与操作系统交互的函数。import os2. 准备文件列表要重命名文件您需要先列出指定目录中的所有文件。可以使用os.listdir()函数来获取目录中的文件列表。# 列出指定目录中的所有文件和文件夹 files os.listdir(path_to_directory)3. 遍历文件列表for file in files: # 获取文件的完整路径 full_path os.path.join(path_to_directory, file) # 检查是否是文件 if os.path.isfile(full_path): # 新的文件名 new_filename new_name # 重命名操作 os.rename(full_path, os.path.join(path_to_directory, new_filename)) print(fRenamed {file} to {new_filename})4. 异常处理在重命名文件时可能会出现各种异常例如目标文件已存在、没有足够权限等。为了确保程序的健壮性应该添加异常处理。try: for file in files: # ...上面的代码 except OSError as e: print(fError occurred: {e})5. 完整的脚本示例import os # 指定要重命名文件的目录 directory path_to_directory # 列出目录中的所有文件 files os.listdir(directory) # 遍历文件列表并进行重命名 for file in files: if os.path.isfile(os.path.join(directory, file)): # 设定新的文件名 new_filename new_name # 重命名文件 try: os.rename( os.path.join(directory, file), os.path.join(directory, new_filename) ) print(fRenamed {file} to {new_filename}) except OSError as e: print(fError renaming {file}: {e})6. 注意安全性和效率在批量重命名文件时应确保不要同时进行多个重命名操作以避免潜在的竞争条件。确保目标目录存在避免在重命名时创建不存在的目录。考虑到操作系统对文件重命名的限制例如在 Windows 中文件名不能超过 255 个字符而在 Unix/Linux 中则没有这个限制。7. 高级用法对于更复杂的重命名任务您可以使用正则表达式或者其他文本处理方法来生成新的文件名。import os import re # 指定目录 directory path_to_directory # 列出目录中的所有文件 files os.listdir(directory) # 遍历文件列表并进行重命名 for file in files: if os.path.isfile(os.path.join(directory, file)): # 使用正则表达式匹配文件名模式并替换为新的模式 new_filename re.sub(r\d, new_prefix, file) # 重命名文件 try: os.rename( os.path.join(directory, file), os.path.join(directory, new_filename) ) print(fRenamed {file} to {new_filename}) except OSError as e: print(fError renaming {file}: {e})这个脚本会将指定目录中所有以数字开头的文件重命名为新的前缀。3.2 删除文件在Python中删除文件是一个相对简单的操作。我们可以使用os库中的os.remove()函数来实现。以下是一个超详细的入门指南介绍如何使用Python删除文件1. 导入必要的库首先您需要导入Python的os库它提供了许多与操作系统交互的函数。import os2. 准备文件路径要删除文件您需要知道要删除的文件的路径。file_path path_to_file3. 检查文件是否存在在删除文件之前最好检查该文件是否存在以避免错误。if os.path.isfile(file_path): print(fFile {file_path} exists, proceed to delete.) else: print(fFile {file_path} does not exist, skip deletion.)4.执行删除操作如果文件存在您可以使用os.remove()函数来删除它。try: os.remove(file_path) print(fFile {file_path} deleted successfully.) except OSError as e: print(fError occurred: {e})5. 完整的脚本示例import os # 指定要删除的文件的目录 file_path path_to_file # 检查文件是否存在 if os.path.isfile(file_path): print(fFile {file_path} exists, proceed to delete.) else: print(fFile {file_path} does not exist, skip deletion.) # 执行删除操作 try: os.remove(file_path) print(fFile {file_path} deleted successfully.) except OSError as e: print(fError occurred: {e})6. 注意安全性和效率在批量删除文件时应确保不要同时进行多个删除操作以避免潜在的竞争条件。确保目标目录存在避免在删除时创建不存在的目录。考虑到操作系统对文件删除的操作限制例如在 Windows 中文件名不能超过 255 个字符而在 Unix/Linux 中则没有这个限制。通过以上步骤您应该能够掌握如何使用Python删除文件。3.3 创建文件在Python中创建文件是一个相对简单的操作。我们可以使用os库中的os.open()函数或者with语句来创建文件。以下是一个超详细的入门指南介绍如何使用Python创建文件1. 导入必要的库首先您需要导入Python的os库它提供了许多与操作系统交互的函数。import os2. 准备文件路径要创建文件您需要知道要创建的文件的路径。file_path path_to_file3. 检查文件路径是否存在在创建文件之前最好检查该文件路径是否存在以避免覆盖其他文件。if not os.path.exists(file_path): print(fFile path {file_path} does not exist, proceed to create.) else: print(fFile path {file_path} already exists, skip creation.)4. 执行创建操作如果文件路径不存在您可以使用os.open()函数来创建文件。try: with open(file_path, w) as f: print(fFile {file_path} created successfully.) except IOError as e: print(fError occurred: {e})这里我们使用with语句来确保文件在操作完成后会被正确关闭。w参数表示以写入模式打开文件如果文件不存在会创建一个新文件。5. 完整的脚本示例import os # 指定要创建的文件的目录 file_path path_to_file # 检查文件路径是否存在 if not os.path.exists(file_path): print(fFile path {file_path} does not exist, proceed to create.) else: print(fFile path {file_path} already exists, skip creation.) # 执行创建操作 try: with open(file_path, w) as f: print(fFile {file_path} created successfully.) except IOError as e: print(fError occurred: {e})6. 注意安全性和效率在创建文件时应确保拥有创建文件的足够权限。避免在内存不足的情况下创建大型文件。通过以上步骤您应该能够掌握如何使用Python创建文件。3.4 获取当前目录在Python中我们可以使用os库中的os.getcwd()函数来获取当前目录的路径。以下是一个示例import os current_directory os.getcwd() print(fCurrent directory is: {current_directory})4 示例4.1 目录.txt自动清洗需要在二级标题所在行最前面空4个格子一级标题不用需要在章和节字的后面加上一个空格需要在页码前面加上符号# 获取桌面路径 import os import re desktop_path os.path.join(os.path.expanduser(~), Desktop) # 目标文件路径 file_path os.path.join(desktop_path, 目录.txt) # 打开文件并读取内容 with open(file_path, r, encodingutf-8) as file: lines file.readlines() modified_lines [] for line in lines: # 去除空格 line line.replace( , ) if len(line) 1: continue # 使用正则表达式在章或节后面添加一个空格仅在后面没有空格的情况下 line re.sub(r(章|节)(?![ ]), r\1 , line) # 在小数点后添加空格 line re.sub(r(\.\d), r\1 , line) if 章 not in line: # 二级标题添加4个空格 line * 4 line # 匹配并去除最外层的英文括号 pattern_en r\(([\d\s])\) line re.sub(pattern_en, r\1, line) # 匹配并去除最外层的中文括号及其内部内容包括除数字和空格以外的字符 pattern r([^]) line re.sub(pattern, r\1, line) # 确保每行只有一个 if not in line: # 在页码数字前添加 只在行尾 line re.sub(r(\d)$, r\1, line) # 去除中文汉字和整体符号左边的冗余符号 pattern r([\u4e00-\u9fff])[^\w\s] line re.sub(pattern, r\1, line) modified_lines.append(line) # 将修改后的内容写回文件 with open(file_path, w, encodingutf-8) as file: file.writelines(modified_lines) # 读取文件内容 with open(file_path, r, encodingutf-8) as file: content file.read() print(content)4.2 批量修改文件夹下的文件命名D:\231127\试卷\00159高级财务会计 目录下的所有图片命名中有_确保_前面的字符串为00159231127你可以使用Python的os模块来实现对文件名的批量修改结合字符串操作来确保文件名中的规定格式。以下是一个示例代码import os # 指定目录路径 directory_path rD:\231127\试卷\00159高级财务会计 # 获取目录下所有文件名 files os.listdir(directory_path) # 遍历文件 for file_name in files: # 构建完整的文件路径 file_path os.path.join(directory_path, file_name) # 检查文件是否是图片文件并且文件名中包含下划线 if file_name.lower().endswith((.png, .jpg, .jpeg, .gif)) and _ in file_name: # 分割文件名以下划线为界 parts file_name.split(_) # 确保分割后的第一部分为00159231127 if parts[0] ! 00159231127: # 构建新文件名 new_file_name 00159231127 _ _.join(parts[1:]) # 构建新文件路径 new_file_path os.path.join(directory_path, new_file_name) # 重命名文件 os.rename(file_path, new_file_path) print(fRenamed: {file_name} -gt; {new_file_name})在上述代码中1.使用 os.listdir 获取目录下的所有文件名然后遍历这些文件名。2.通过 os.path.join 构建完整的文件路径确保路径的正确性。3.检查文件是否是图片文件以 .png, .jpg, .jpeg, .gif 结尾的文件并且文件名中包含下划线。4.使用 split(_) 分割文件名确保分割后的第一部分为00159231127。5.构建新文件名并使用 os.rename 来重命名文件。4.3 检测同级目录下是否存在同名文件夹检测 D:\231127\试卷 下的文件夹命名前5位是否存在一样的如果一样打印出来你可以使用Python来检查指定目录下的文件夹查找前5位命名相同的文件夹。以下是一个示例代码import os # 指定目录路径 directory_path rD:\231127\试卷 # 获取目录下所有文件夹名 folders [folder for folder in os.listdir(directory_path) if os.path.isdir(os.path.join(directory_path, folder))] # 创建一个空字典用于存储前5位相同的文件夹名 same_prefix_folders {} # 遍历文件夹 for folder in folders: # 获取前5位文件夹名 prefix folder[:5] # 检查前5位文件夹名是否已经在字典中 if prefix in same_prefix_folders: # 将文件夹名添加到对应的键值中 same_prefix_folders[prefix].append(folder) else: # 若字典中没有该前5位文件夹名则创建键值对 same_prefix_folders[prefix] [folder] # 输出前5位相同的文件夹名 for prefix, folders in same_prefix_folders.items(): if len(folders) gt; 1: print(f前5位为 {prefix} 的文件夹有以下重复命名) print(, .join(folders))这段代码执行以下操作1.使用os.listdir获取指定目录下的所有文件夹名。2.然后遍历这些文件夹名提取前 5 位名称并将具有相同前缀的文件夹放入一个字典中。3.最后打印出前 5 位相同的文件夹名。原文python超详细基础文件操作【建议收藏】_python程序设计基础文件操作-CSDN博客扩展爬虫经常需要将数据保存到excel表格中除了普通的csv模块以外还有其他方式1.pandas# 使用 pandas 库 import pandas as pd filename ./data/test.csv df pd.read_csv(filename) print(df的数据类型为:{}.format(type(df))) print(df)2.openpyxldef write_to_excel(house_data, file_path): wb openpyxl.Workbook() sheet wb.active # 创建sheet表格添加列描述 sheet[A1] 房屋信息描述 sheet[B1] 房屋单价每平方 sheet[C1] 房屋总价万 # 循环遍历data列表中的元素row是当前行数从2开始row_data是当前元素的内容 # enumerate函数用于同时获取列表中的元素和它们的索引值 for row, row_data in enumerate(house_data, start2): # 分别将当前列表的值写到对应的行 sheet[fA{row}] row_data[0] sheet[fB{row}] row_data[1] sheet[fC{row}] row_data[2] wb.save(file_path) print(f链家二手房信息表创建完成保存路径为: {file_path})
延伸阅读

更多相关文章

2026/9/21 7:51:36

linux/windows共享文件夹

windows共享文件夹linux访问1、在windows中,设置共享文件选择对应的文件夹,右键属性点击共享,对文件进行共享共享之后显示如下:2、在linux端,使用mount命令进行挂载进入到自己想共享到的文件夹执行命令sudo mount -t c…

2026/9/24 12:13:06

鼠须管输入法:在macOS上打造你的专属中文输入体验终极指南

鼠须管输入法:在macOS上打造你的专属中文输入体验终极指南 【免费下载链接】squirrel 【鼠鬚管】Rime for macOS 项目地址: https://gitcode.com/gh_mirrors/squ/squirrel 还在为macOS上的中文输入体验而烦恼吗?想要告别卡顿、广告和功能限制&…

2026/9/20 0:10:07

centos7.5 安装jdk、mysql、redis、kafka、nginx

预置步骤 安装gcc工具 # 安装gcc yum install gcc-c# 安装PCRE pcre-devel yum install -y pcre pcre-devel# 安装zlib yum install -y zlib zlib-devel# 安装Open SSL yum install -y openssl openssl-devel安装JDK 下载jdk rpm并安装 # 下载 https://www.oracle.com/jav…

2026/9/25 8:17:53

Cursor vs Trae:Auto模式谁更强?完全免费的情况下,大跌眼镜。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑