csv
文件编码格式多种多样,批量处理时容易出现问题,今天偶然看到有人提问:如何处理PowerBI批量导入csv
文件时,文件编码不一致的问题?因为我之前处理过单个csv
文件编码检测的问题,初步认为是可以利用Python解决的,今天正好是周末,便研究了一下实现方法。目标是实现csv
文件编码格式批量获取,并且按照编码格式在当前目录下创建子目录,最后将同一种编码格式的csv
文件移动至对应的子目录下,最终效果如下图:
根据项目需求,程序将用到os
, chardet
, shutil
分别用于识别文件、检测编码和移动文件,三大模块用法如下:
import os
path = input('请输入文件夹路径: ')
files = os.listdir(path)
csv_list = []
for f in files:
if os.path.splitext(f)[1] == '.csv':
csv_list.append(path + '\\' + f)
else:
pass
import chardet
file_code = chardet.detect(str)['encoding']
import shutil
shutil.move(src_path, dst_path)
根据项目需求将程序逻辑拆解为如下几个步骤:
csv
文件;程序会多次用到循环的判断以及报错的处理,完整代码如下:
import os
import chardet
import shutil
path = input('请输入文件夹路径: ')
files = os.listdir(path)
csv_list = []
for f in files:
if os.path.splitext(f)[1] == '.csv':
csv_list.append(path + '\\' + f)
else:
pass
for i in range(len(csv_list)):
with open(csv_list[i], 'rb+') as ff:
lines = ff.readline()
file_code = chardet.detect(lines)['encoding']
dst_path = os.path.split(csv_list[i])[0] + '\\' + file_code
if not os.path.exists(dst_path):
os.mkdir(dst_path)
shutil.move(csv_list[i], dst_path +'\\'+ os.path.split(csv_list[i])[1])