在需要读取众多文件格式为csv、xlsx等文件,且编码方式不统一的情况时,如何一次性读取呢?
面对这种情况,需要借助编码检测工具,先进行编码检测然后再根据编码检测的结果读取文件。
import os
import pandas as pd
import chardet
# 列出目标文件夹中的文件
file_list = os.listdir("../filelist")
None_file = []
for file in file_list:
file_format = file.split('.')[-1]
file_abs = f"../filelist/{file}"
# 检测文件编码方式
with open(file_abs, 'rb') as file:
result = chardet.detect(file.read())
encode_name = result['encoding']
print(f'{file}---->{encode_name}')
if encode_name!=None:
if file_fomat=='csv':
temp_data = pd.read_csv(file_abs)
elif file_format=='xlsx':
temp_data = pd.read_excel(file_abs)
else:
None_file.append(file)
print('检测编码方式为None的文件:',None_file)
通过以上代码可以检测每个文件的编码方式,注意chardet
不是所有的文件编码都能检测出来,检测出来的也不一定完全正确,例如如果检测出是GB2312
编码,可以替换为GBK
编码(因为GBK
是GB2312
的父集)。