【发布时间】:2021-09-07 11:28:52
【问题描述】:
我有 15,000 多个 CSV 文件,我正在尝试将它们合并为一个。我的问题是……
当 CSV 具有不同的编码类型时,如何连接多个 CSV(使用 glob)?
CSV 文件的两种不同编码类型是 ANSI 和 UTF-8。我一直在查看很多与此相关的 Stack Overflow 帖子,但我找不到可靠的解决方案。
大多数帖子都这样说; “尝试使用 encoding='latin1'、encoding='iso-8859-1' 或 encoding='cp1252' 调用 read_csv”这不起作用,因为使用了两种不同的编码类型。
这是我的代码:
#WORKING
#Using GLOB to read every single CSV in a folder
import glob
import pandas as pd
from datetime import datetime
import numpy as np
import os
import codecs
path = r'C:\data'
files = glob.glob(path + "/*.csv")
files.sort(key=os.path.getmtime)
li = []
for filename in files:
df = pd.read_csv(filename, index_col=None, header=0, sep = ' ', skiprows=1, encoding='cp1252', names=['Sec1970', 'VALUE1', 'VALUE2', 'VALUE3', 'VALUE4', 'VALUE5', 'VALUE6'])
df.columns = df.columns.str.replace('-', '')
df.columns = df.columns.str.replace(':', '')
li.append(df)
data = pd.concat(li, axis=0, ignore_index=True)
使用 encoding='cp1252 时的错误消息
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 96151: character maps to <undefined>
使用 encoding=utf-8 时的错误消息
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf9 in position 48129: invalid start byte
无论我使用什么编码类型,我都会收到错误消息。我有两个问题...
- 我可以通过上面显示的代码/方法读取 CSV 文件,同时使用 ASCII 和 UTF-8 编码吗?
- 如果我不能同时使用 ASCII 和 UTF-8 编码,有什么合适的方法来更改 15,000+ CSV 文件的编码类型?
【问题讨论】:
-
krinkere.github.io/krinkersite/encoding_csv_file_python.html。在读入数据帧之前检查 csv 的编码。或者只是捕获错误并尝试其他编码。
标签: python pandas dataframe csv encoding