繁体   English   中英

在 Python 中将 CSV 转换为 UTF-8

[英]Convert CSV to UTF-8 in Python

我正在尝试创建一个没有标题的重复 CSV。 当我尝试这样做时,我收到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 1895: invalid start byte.

我已经阅读了关于UnicodeUTF-8编码的 python CSV文档并实现了它。 但是,生成的输出文件中没有数据。 不确定我在这里做错了什么。

import csv

path =  '/Users/johndoe/file.csv'

with open(path, 'r') as infile, open(path + 'final.csv', 'w') as outfile:

    def unicode_csv(infile, outfile):
        inputs = csv.reader(utf_8_encoder(infile))
        output = csv.writer(outfile)

        for index, row in enumerate(inputs):
            yield [unicode(cell, 'utf-8') for cell in row]
            if index == 0:
                 continue
        output.writerow(row)

    def utf_8_encoder(infile):
        for line in infile:
            yield line.encode('utf-8')

unicode_csv(infile, outfile)

解决方案是简单地将两个附加参数添加到

with open(path, 'r') as infile:

这两个参数是 encoding='UTF-8' 和 errors='ignore'。 这使我可以创建没有标题和 UnicodeDecodeError 的原始 CSV 的副本。 下面是完成的代码。

import csv

path =  '/Users/johndoe/file.csv'

with open(path, 'r', encoding='utf-8', errors='ignore') as infile, open(path + 'final.csv', 'w') as outfile:
     inputs = csv.reader(infile)
     output = csv.writer(outfile)

     for index, row in enumerate(inputs):
         # Create file with no header
         if index == 0:
             continue
         output.writerow(row)

由于行

unicode_csv(infile,outfile)

没有缩进,它超出了with命令的范围,当它被调用时,infile 和 outfile 都被关闭。

文件应该在使用时打开,而不是在定义函数时打开,所以有:

with open(path, 'r') as infile, open(path + 'final.csv', 'w') as outfile:
    unicode_csv(infile,outfile)

如果您能够使用熊猫,并且知道文件的确切编码,则可以尝试以下操作:

import pandas as pd

path =  '/Users/johndoe/file.csv'

df = pd.read_csv(path, encoding='ISO-8859-1')
df.to_csv(path, encoding='utf-8', index=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM