欢迎各位兄弟 发布技术文章
这里的技术是共享的
见下面红色的字
要将一个文件夹下的所有 .xlsx
文件批量转换为 .csv
文件,你可以使用 pandas
库来处理这些 Excel 文件,并将其保存为 CSV 格式。此外,你还需要使用 Python 的内置模块 os
或 glob
来遍历指定文件夹中的所有 .xlsx
文件。
首先,请确保你已经安装了 pandas 和 openpyxl(用于读取 xlsx 文件)库。如果没有安装,可以通过 pip 安装:
bash深色版本pip install pandas openpyxl
然后,可以使用以下代码来进行批量转换:
python深色版本import os import pandas as pd # 指定包含 .xlsx 文件的文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的所有文件 for file_name in os.listdir(folder_path): # 检查文件是否为 .xlsx 文件 if file_name.endswith('.xlsx'): # 构造完整的文件路径 file_path = os.path.join(folder_path, file_name) # 读取 Excel 文件 excel_data = pd.read_excel(file_path) # 构造新的 CSV 文件名 csv_file_name = file_name.replace('.xlsx', '.csv') csv_file_path = os.path.join(folder_path, csv_file_name) # 将数据保存为 CSV 文件 excel_data.to_csv(csv_file_path, index=False) print("转换完成")
这段代码会遍历给定文件夹中的所有文件,对于每个以 .xlsx
结尾的文件,它都会读取文件内容,并将它们保存为同名但扩展名为 .csv
的文件。请注意,这个脚本假设所有的 .xlsx
文件只有一个工作表;如果有多个工作表,你需要根据需要调整代码来处理每一个工作表。
如果你想要处理更复杂的情况,例如文件夹中还有子文件夹,或者你想只处理特定的工作表,那么你可能需要对上述代码进行相应的修改。
如果所有的 .xlsx
文件中都有相同的 sheet 名称,并且你希望将每个文件的这个特定 sheet 转换为 .csv
文件,那么可以在读取 Excel 文件时指定 sheet 名称。下面是一个修改后的例子,它会针对每个 .xlsx
文件中的特定 sheet 进行操作:
python深色版本import os
import pandas as pd
# 指定包含 .xlsx 文件的文件夹路径
folder_path = 'path/to/your/folder'
# 指定要转换的 sheet 名称
sheet_name = 'Sheet1' # 将 'Sheet1' 替换为你的 sheet 名称
# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
# 检查文件是否为 .xlsx 文件
if file_name.endswith('.xlsx'):
# 构造完整的文件路径
file_path = os.path.join(folder_path, file_name)
try:
# 读取 Excel 文件的指定 sheet
excel_data = pd.read_excel(file_path, sheet_name=sheet_name)
# 构造新的 CSV 文件名
csv_file_name = file_name.replace('.xlsx', '.csv')
csv_file_path = os.path.join(folder_path, csv_file_name)
# 将数据保存为 CSV 文件
excel_data.to_csv(csv_file_path, index=False)
print(f"成功转换: {file_name}")
except Exception as e:
print(f"转换失败: {file_name}, 错误信息: {e}")
print("转换过程结束")
这段代码与之前的版本相似,但增加了对特定 sheet 的处理。如果你不确定 sheet 名称是什么,可以先用 pd.ExcelFile
来列出所有可用的 sheet 名称:
python深色版本excel_file = pd.ExcelFile(file_path) print(excel_file.sheet_names) # 打印出所有 sheet 名称
这样可以帮助你确认需要使用的 sheet 名称。
如果你有多个 sheet 并且想要将每个 sheet 分别保存为单独的 CSV 文件,你可以这样做:
python深色版本# 对于每个 .xlsx 文件中的每一个 sheet,生成一个对应的 .csv 文件
for file_name in os.listdir(folder_path):
if file_name.endswith('.xlsx'):
file_path = os.path.join(folder_path, file_name)
try:
# 读取 Excel 文件并获取所有 sheet 名称
excel_file = pd.ExcelFile(file_path)
for sheet in excel_file.sheet_names:
# 读取当前 sheet 的数据
excel_data = pd.read_excel(excel_file, sheet_name=sheet)
# 构造新的 CSV 文件名,包含原始文件名和 sheet 名称
base_name = os.path.splitext(file_name)[0]
csv_file_name = f"{base_name}_{sheet}.csv"
csv_file_path = os.path.join(folder_path, csv_file_name)
# 将数据保存为 CSV 文件
excel_data.to_csv(csv_file_path, index=False)
print(f"成功转换: {file_name} 中的 sheet '{sheet}'")
except Exception as e:
print(f"转换失败: {file_name}, 错误信息: {e}")
print("多 sheet 文件的转换过程结束")
这段代码将会遍历每个 .xlsx
文件的所有 sheet,并为每个 sheet 创建一个独立的 .csv
文件,文件名为原文件名加上 sheet 名称。
如果 .xlsx
文件中有多个 sheet,并且你希望将每个 sheet 转换为单独的 .csv
文件,那么你可以遍历每个文件中的所有 sheet,并分别为它们创建一个 .csv
文件。下面是一个示例代码,展示了如何实现这一点:
python深色版本import os
import pandas as pd
# 指定包含 .xlsx 文件的文件夹路径
folder_path = 'path/to/your/folder'
# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
# 检查文件是否为 .xlsx 文件
if file_name.endswith('.xlsx'):
# 构造完整的文件路径
file_path = os.path.join(folder_path, file_name)
try:
# 使用 pd.ExcelFile 来读取 Excel 文件并获取所有 sheet 名称
excel_file = pd.ExcelFile(file_path)
# 对于每个 sheet,生成一个对应的 .csv 文件
for sheet in excel_file.sheet_names:
# 读取当前 sheet 的数据
excel_data = pd.read_excel(excel_file, sheet_name=sheet)
# 构造新的 CSV 文件名,包含原始文件名(不带扩展)和 sheet 名称
base_name = os.path.splitext(file_name)[0]
csv_file_name = f"{base_name}_{sheet}.csv"
csv_file_path = os.path.join(folder_path, csv_file_name)
# 将数据保存为 CSV 文件
excel_data.to_csv(csv_file_path, index=False)
print(f"成功转换: {file_name} 中的 sheet '{sheet}'")
except Exception as e:
print(f"转换失败: {file_name}, 错误信息: {e}")
print("多 sheet 文件的批量转换完成")
这段代码会做以下事情:
它会遍历指定文件夹中的所有文件。
对于每个以 .xlsx
结尾的文件,它会使用 pd.ExcelFile
读取文件,并获取所有可用的 sheet 名称。
然后,对于每个 sheet,它会读取数据并构造一个新的 .csv
文件名,这个文件名基于原始的 .xlsx
文件名加上具体的 sheet 名称。
最后,它会将每个 sheet 的内容保存为一个独立的 .csv
文件。
这种方法确保了即使一个 Excel 文件中包含多个 sheet,每个 sheet 的数据也会被正确地转换并保存到各自的 CSV 文件中。如果你有进一步的需求或限制条件,请告知以便提供更详细的帮助。
最终代码 xlsx 转为 csv
如果转换后的 CSV 文件出现乱码,这通常是由于编码问题引起的。Excel 文件中的文本可能使用了特定的编码(如 UTF-8、GBK 等),而在保存为 CSV 文件时,默认的编码可能与之不匹配,导致乱码现象。
要解决这个问题,你可以显式地指定编码格式。对于中文环境,通常使用 utf-8
或者 gbk
编码。下面是一个改进后的代码示例,它在保存 CSV 文件时指定了编码:
python深色版本import os
import pandas as pd
# 指定包含 .xlsx 文件的文件夹路径
folder_path = 'path/to/your/folder'
# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
# 检查文件是否为 .xlsx 文件
if file_name.endswith('.xlsx'):
# 构造完整的文件路径
file_path = os.path.join(folder_path, file_name)
try:
# 使用 pd.ExcelFile 来读取 Excel 文件并获取所有 sheet 名称
excel_file = pd.ExcelFile(file_path)
# 对于每个 sheet,生成一个对应的 .csv 文件
for sheet in excel_file.sheet_names:
# 读取当前 sheet 的数据
excel_data = pd.read_excel(excel_file, sheet_name=sheet)
# 构造新的 CSV 文件名,包含原始文件名(不带扩展)和 sheet 名称
base_name = os.path.splitext(file_name)[0]
csv_file_name = f"{base_name}_{sheet}.csv"
csv_file_path = os.path.join(folder_path, csv_file_name)
# 将数据保存为 CSV 文件,并指定编码为 utf-8 或 gbk
encoding = 'utf-8' # 或者 'gbk',根据你的具体情况选择
excel_data.to_csv(csv_file_path, index=False, encoding=encoding)
print(f"成功转换: {file_name} 中的 sheet '{sheet}' 使用编码 {encoding}")
except Exception as e:
print(f"转换失败: {file_name}, 错误信息: {e}")
print("多 sheet 文件的批量转换完成")
尝试使用 utf-8
编码进行保存,如果仍然遇到乱码问题,可以尝试使用 gbk
编码,特别是在处理中文字符时。如果你不确定应该使用哪种编码,可以根据文件内容的实际语言和地区来决定。
另外,某些情况下,Excel 文件本身可能已经包含了 BOM(字节顺序标记),在这种情况下,你可能需要在读取文件时也指定编码方式,例如:
python深色版本excel_data = pd.read_excel(file_path, sheet_name=sheet, encoding='utf-8-sig')
这里的 utf-8-sig
编码是带有 BOM 的 UTF-8 编码。通过这种方式,Pandas 可以正确解析文件开头的 BOM 标记,避免乱码问题。
最终代码 xls 转为 csv
明白了,如果你需要将 .xls
文件(即旧版本的 Excel 文件)转换为 .csv
文件,并且遇到了乱码问题,那么处理方式与 .xlsx
文件类似,但需要注意的是读取 .xls
文件时可能需要用到 xlrd
库,因为 pandas.read_excel()
默认使用 xlrd
来处理 .xls
文件。
以下是专门针对 .xls
文件转 .csv
的代码示例,并解决了可能出现的编码问题:
python深色版本import os
import pandas as pd
# 指定包含 .xls 文件的文件夹路径
folder_path = 'path/to/your/folder'
# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
# 检查文件是否为 .xls 文件
if file_name.endswith('.xls'):
# 构造完整的文件路径
file_path = os.path.join(folder_path, file_name)
try:
# 使用 pd.ExcelFile 来读取 Excel 文件并获取所有 sheet 名称
excel_file = pd.ExcelFile(file_path, engine='xlrd') # 确保使用 xlrd 引擎
# 对于每个 sheet,生成一个对应的 .csv 文件
for sheet in excel_file.sheet_names:
# 读取当前 sheet 的数据
excel_data = pd.read_excel(excel_file, sheet_name=sheet, engine='xlrd')
# 构造新的 CSV 文件名,包含原始文件名(不带扩展)和 sheet 名称
base_name = os.path.splitext(file_name)[0]
csv_file_name = f"{base_name}_{sheet}.csv"
csv_file_path = os.path.join(folder_path, csv_file_name)
# 将数据保存为 CSV 文件,并指定编码为 utf-8 或 gbk
encoding = 'utf-8' # 或者 'gbk',根据你的具体情况选择
excel_data.to_csv(csv_file_path, index=False, encoding=encoding)
print(f"成功转换: {file_name} 中的 sheet '{sheet}' 使用编码 {encoding}")
except Exception as e:
print(f"转换失败: {file_name}, 错误信息: {e}")
print("多 sheet 文件的批量转换完成")
确保你已经安装了 xlrd
库来支持 .xls
文件的读取。如果还没有安装,可以通过 pip 安装它:
bash深色版本pip install xlrd
关于编码的问题,尝试使用 utf-8
编码进行保存,如果仍然遇到乱码问题,可以尝试使用 gbk
编码,特别是在处理中文字符时。如果你不确定应该使用哪种编码,可以根据文件内容的实际语言和地区来决定。
另外,如果 .xls
文件是以 UTF-8 编码保存并且带有 BOM(字节顺序标记),你可以尝试在保存 CSV 文件时使用 utf-8-sig
编码,这有助于正确解析文件开头的 BOM 标记,避免乱码问题。
请替换 'path/to/your/folder'
为你实际的文件夹路径,并根据需要调整编码设置。