我正在尝试使用python将csv文件编码为utf8

时间:2013-12-13 05:42:13

标签: python csv utf-8

我正在使用python使用python读取和编码许多文件到utf8,我尝试使用下面的代码:

import os
from os import listdir

def find_csv_filenames(path_to_dir, suffix=".csv" ):
    path_to_dir = os.path.normpath(path_to_dir)
    filenames = listdir(path_to_dir)
#Check *csv directory

    fp = lambda f: not os.path.isdir(path_to_dir+"/"+f) and f.endswith(suffix)
    return [path_to_dir+"/"+fname for fname in filenames if fp(fname)]

def convert_files(files, ascii, to="utf-8"):
    count = 0
    lineno = 0
    for name in files:
        lineno = lineno+1
        with open(name) as f:
            file_target = open(name, mode='r', encoding='latin-1')
            file_content = file_target.read()
            file_target.close

        print(lineno)
        file_source = open("./csv/data{}.csv".format(lineno), mode='w', encoding='utf-8')
        file_source.write(file_content) 

csv_files = find_csv_filenames('./csv', ".csv")
convert_files(csv_files, "cp866") 

问题是,在我将数据读写到其他文件并将其编码为utf8之后,它仍然无效。

1 个答案:

答案 0 :(得分:0)

在打开不清楚编码的文件之前,您可以使用chardet来检测文件的编码,而不是使用猜测编码来打开文件。用法是这样的:

>>> import chardet
>>> encoding = chardet.detect('PATH/TO/FILE')['encoding']

然后打开检测到编码的文件,并将内容写入以'utf-8'编码打开的文件中。

如果您不确定文件是否使用'utf-8'编码转换,您可以使用enca查看文件的编码是'ASCII'还是'utf-8',如下所示在Linux shell中:

$ enca FILENAME