python txt csv文件同时含有多种编码清洗

2022-02-23  本文已影响0人  michaelxwang
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 23 11:25:05 2022

@author: mw
"""

from tqdm import tqdm 

#源文件,清洗后的文件
file='idc201902-1.csv'
new_file='2_idc201902-1.csv'        


#打开文件,以二进制文件读取
file1 = open(file,'rb')
r = file1.read()
file1.close()

#文件拆分为列表
r=r.split(b'\n')

#删除文件头非数据部分
del r[0:3]
del r[1]

#计算文件长度
count=len(r)

#拆分子列表
for i in tqdm(range(0,count)):
    r[i]=r[i].split(b',')

#子列表第3个字段更换编码    
for i in tqdm(range(0,count)):
    if len(r[i])>=5:
        r[i][0]=r[i][0].strip()
        r[i][1]=r[i][1].strip()
        #第3列为udf8 其他列为gbk
        r[i][2]=r[i][2].decode('utf8').encode('gbk')
        

#写入替换文件        
with open(new_file, "w", encoding="gbk") as f:   # 写入替换好的文本
    print('写入替换文本...')
    for i in tqdm(range(0,count)):
        if len(r[i])>=5:
            f.write(r[i][0].decode('gbk')+','+r[i][1].decode('gbk')+','+r[i][2].decode('gbk')+','+r[i][3].decode('gbk')+','+r[i][4].decode('gbk')+'\n')
        else:
            print('错误行')
            print(r[i])
上一篇 下一篇

猜你喜欢

热点阅读