解决乱码问题,爬虫获取的多个CSV文件批量合并成一个xls或xlsx文件

在本文的介绍中

合并CSV文件有两种方法

一种是在cmd中输入copy *.CSV all.csv语句合并

但是这种方法容易在各个CSV文件编码不同等情况下导致生成的EXCEL文件全是乱码

所以有了作者要介绍的第二种方法

综合利用EXCEL软件和PyCharm(Python) 进行合并


以下为示例数据文件

  


下面介绍第一种方法

1.键盘输入win+R

2.在弹出的界面中输入cmd

3.在弹出的窗口中输入你保存所有CSV文件的文件夹路径

4.使用cd进入目标文件夹后输入 copy *.CSV all.csv 语句,将所有CSV文件复制到all.csv文件中

5.将all.csv文件打开之后虽然合并成功,但是会出现乱码 

因此,在该方法不适用的情况下采用第二种方法,综合EXCEL和PyCharm(Python) 


下面介绍第二种方法

1.在保存CSV文件的文件夹里新建一个EXCEL文件并打开

2.在空表格中同时按住alt+F11打开一个窗口

 3.双击该窗口左侧的Sheet1,然后在打开的窗口中输入如下代码

Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlNormal
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

4.在该界面下点击运行(F5)开始将CSV文件转化为xls文件

 在该步骤中,需要在弹出的窗口中选择存放CSV文件的文件夹,选择后EXCEL会弹出很多界面,请耐心等待,弹窗结束后即运行完成。 

5.步骤4运行完成后的结果如图所示

可见该文件夹是xls文件与csv文件混合,没关系,python会出手 

 6.打开PyCharm建立一个python文件,输入如下代码

import tkinter as tk
from tkinter import filedialog
import os
import xlrd  # 读取Excel文件的包
import xlsxwriter  # 将文件写入Excel的包


# 打开excel
def OpenExcel(Filepath):
    try:
        file = xlrd.open_workbook(Filepath)
        return file
    except Exception as e:
        print(e)


# 获取Excel中所有的sheet
def GetAllSheets(file):
    return file.sheets()


# 获取某个sheet表的行数
def GetAllRows(table):
    return table.nrows


# 读取文件内容
def GetContent(excel, sheetNo):
    content = list()
    try:
        sheets = GetAllSheets(excel)
        table = sheets[sheetNo]
    except Exception as e:
        print(e)
    rows = GetAllRows(table)
    for i in range(rows):
        data = table.row_values(i)  # 第i行的数据
        content.append(data)
    return content


# 所有的Excel的所有sheets变成一个sheet
def Sum1(fileName, data):
    '''
    将所有文件的sheet整合到一个sheet中
    '''
    finalFile = xlsxwriter.Workbook(fileName)  # 创建一个工作表文件
    sheet = finalFile.add_worksheet()  # 添加一个sheet
    count = 0
    for sheetId in range(len(data)):
        for row in range(len(data[sheetId])):
            for col in range(len(data[sheetId][row])):
                d = data[sheetId][row][col]
                sheet.write(count, col, d)
            count = count + 1
    finalFile.close()


if __name__ == '__main__':
    '''打开选择文件夹对话框'''
root = tk.Tk()
root.withdraw()
folderPath = filedialog.askdirectory()  # 获得选择好的文件夹
# Filepath = filedialog.askopenfilename() #获得选择好的文件
data = list()
fileSet = os.listdir(folderPath)
for file in fileSet:
    if file.endswith('.xls'):
        try:
            excel = OpenExcel(folderPath + '/' + file)
        except Exception as e:
            print(e)
        sheets = GetAllSheets(excel)
        for i in range(len(sheets)):
            data.append(GetContent(excel, i))

fileName = str('/final.xlsx')
finalFilePath = folderPath + fileName
Sum1(finalFilePath, data)

7.运行,并选择存放csv文件和xls的文件夹,就可在文件夹中得到final.xlsx文件,即想要的文件

试试吧!祝你成功!


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用Python合并两个CSV文件,你可以使用pandas库中的merge函数或concat函数。下面是两种方法的示例代码: 方法一:使用merge函数 ```python import pandas as pd data1 = pd.read_csv("path/to/file1.csv") data2 = pd.read_csv("path/to/file2.csv") merged_data = pd.merge(data1, data2, how='outer') merged_data.to_csv("path/to/output.csv", index=False) ``` 方法二:使用concat函数 ```python import pandas as pd import glob input_path = "path/to/input/folder/*.csv" output_path = "path/to/output.csv" all_files = glob.glob(input_path) dataframes = \[\] for file in all_files: df = pd.read_csv(file) dataframes.append(df) merged_data = pd.concat(dataframes) merged_data.to_csv(output_path, index=False) ``` 以上代码中,你需要将"path/to/file1.csv"和"path/to/file2.csv"替换为你要合并的两个CSV文件的路径。如果你使用的是方法二,你还需要将"path/to/input/folder/*.csv"替换为包含要合并的所有CSV文件文件夹的路径。 希望这可以帮助到你! #### 引用[.reference_title] - *1* *3* [python将两个或文件夹中的多个csv表格合并在一起](https://blog.csdn.net/QMU111/article/details/129993138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用python合并两个csv文件的实现方法,以及对表头和空行的处理](https://blog.csdn.net/m0_59571772/article/details/118294446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值