如何用Python批量将CSV文件编码转换为UTF-8并转为Excel格式?

发布于:2025-03-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

在处理数据时,CSV文件格式常常用作数据的交换格式。不过,很多情况下我们会遇到编码问题,特别是当文件不是UTF-8编码时。为了更好地处理这些文件,可能需要将它们转换为UTF-8编码,并且将其转换为Excel格式,这样可以方便后续的数据分析和使用。今天就来聊聊如何用Python实现这一过程。

准备工作:安装必要的库

我们需要确保安装了所需的Python库。主要用到的库有pandasopenpyxlpandas是一个强大的数据分析工具,而openpyxl则用于处理Excel文件。可以通过以下命令安装这些库:

pip install pandas openpyxl
读取原始CSV文件

在这个步骤中,我们将读取CSV文件。假设这些文件存放在一个文件夹中,命名为csv_files。我们可以使用Python的os库来列出这个文件夹中的所有CSV文件。这里是一个简单的代码示例,展示如何读取这些文件:

import os
import pandas as pd

# 定义文件夹路径
folder_path = 'csv_files'

# 获取所有CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
print("发现的CSV文件:", csv_files)
转换编码为UTF-8

接下来,我们需要逐个读取这些CSV文件,并将其编码转换为UTF-8。这里使用pandasread_csv函数来读取文件,并通过to_csv函数将其保存为UTF-8编码的文件。代码如下:

for file in csv_files:
    file_path = os.path.join(folder_path, file)
    
    # 尝试读取文件,指定原始编码
    try:
        # 这里假设原始编码为ISO-8859-1,实际情况中可能需要根据文件调整
        df = pd.read_csv(file_path, encoding='ISO-8859-1')
        
        # 保存为UTF-8编码
        utf8_file_path = os.path.join(folder_path, 'utf8_' + file)
        df.to_csv(utf8_file_path, index=False, encoding='utf-8')
        print(f"文件 {file} 转换为UTF-8成功!")
    except Exception as e:
        print(f"读取文件 {file} 时发生错误:{e}")

在这个过程中,如果原始文件编码不是ISO-8859-1,需要根据实际情况进行调整。发生错误时,可以捕获异常并打印出错误信息,以便后续调试。

将UTF-8编码的CSV文件转换为Excel格式

完成编码转换后,我们需要将UTF-8编码的CSV文件转换为Excel文件。这个过程同样简单,使用pandasExcelWriter可以很方便地将数据写入Excel。以下是实现这一功能的代码:

# 创建一个新的文件夹用于保存Excel文件
excel_folder_path = 'excel_files'
os.makedirs(excel_folder_path, exist_ok=True)

# 读取UTF-8编码的CSV文件并写入Excel
for file in csv_files:
    utf8_file_path = os.path.join(folder_path, 'utf8_' + file)
    
    # 读取UTF-8编码的CSV文件
    df = pd.read_csv(utf8_file_path)
    
    # 定义Excel文件的名称
    excel_file_name = os.path.splitext(file)[0] + '.xlsx'
    excel_file_path = os.path.join(excel_folder_path, excel_file_name)
    
    # 将DataFrame写入Excel文件
    with pd.ExcelWriter(excel_file_path, engine='openpyxl') as writer:
        df.to_excel(writer, index=False, sheet_name='Sheet1')
    
    print(f"文件 {excel_file_name} 转换为Excel格式成功!")

在这里,我们首先创建一个新的文件夹excel_files用于存放转换后的Excel文件。然后,读取UTF-8编码的CSV文件,使用ExcelWriter将其写入Excel文件中。这样,我们就完成了整个转换过程。

完整的代码示例

将上述步骤整合在一起,完整的代码如下:

import os
import pandas as pd

# 定义文件夹路径
folder_path = 'csv_files'
excel_folder_path = 'excel_files'
os.makedirs(excel_folder_path, exist_ok=True)

# 获取所有CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
print("发现的CSV文件:", csv_files)

for file in csv_files:
    file_path = os.path.join(folder_path, file)
    
    try:
        # 读取原始文件,假设原始编码为ISO-8859-1
        df = pd.read_csv(file_path, encoding='ISO-8859-1')
        
        # 保存为UTF-8编码
        utf8_file_path = os.path.join(folder_path, 'utf8_' + file)
        df.to_csv(utf8_file_path, index=False, encoding='utf-8')
        print(f"文件 {file} 转换为UTF-8成功!")
        
        # 读取UTF-8编码的CSV文件并写入Excel
        df = pd.read_csv(utf8_file_path)
        excel_file_name = os.path.splitext(file)[0] + '.xlsx'
        excel_file_path = os.path.join(excel_folder_path, excel_file_name)
        
        with pd.ExcelWriter(excel_file_path, engine='openpyxl') as writer:
            df.to_excel(writer, index=False, sheet_name='Sheet1')
        
        print(f"文件 {excel_file_name} 转换为Excel格式成功!")
    
    except Exception as e:
        print(f"处理文件 {file} 时发生错误:{e}")

通过以上步骤,你可以方便地将多个CSV文件的编码转换为UTF-8并转为Excel格式。这个过程不仅有效,还能节省大量时间,尤其在处理大量数据时。希望这个方法能帮助你更好地管理和处理你的数据!如果有任何问题,随时可以问我!


网站公告

今日签到

点亮在社区的每一天
去签到