在Python3中对csv文件使用正确的编码
我编写了一个函数,它接受一个变量,在Python3中对csv文件使用正确的编码,python,python-3.x,csv,encoding,decoding,Python,Python 3.x,Csv,Encoding,Decoding,我编写了一个函数,它接受一个变量,file,这是一个大的.csv文档。在为一个特定文件(该文件为德语)调用函数后,立即出现以下错误: UnicodeDecodeError:'utf-8'编解码器无法解码位置4中的字节0xe4:无效的连续字节 系统的默认编码为utf-8,但如果Iopen('C:/Users/me/Desktop/data/myfile.csv'),则输出为: 使用file.decode('cp1252').encode('utf8')不起作用,因为'str'对象没有属性“dec
file
,这是一个大的.csv
文档。在为一个特定文件(该文件为德语)调用函数后,立即出现以下错误:
UnicodeDecodeError:'utf-8'编解码器无法解码位置4中的字节0xe4:无效的连续字节
系统的默认编码为utf-8
,但如果Iopen('C:/Users/me/Desktop/data/myfile.csv')
,则输出为:
使用file.decode('cp1252').encode('utf8')
不起作用,因为'str'对象没有属性“decode'
,所以我尝试:
for decodedLine in open('C:/Users/me/Desktop/data/myfile.csv', 'r', encoding='cp1252'):
line = decodedLine.split('\t')
但是line
是一个列表对象,我不能.encode()
它
如何使具有不同编码的
.csv
文件可读 我建议尝试使用不同编码的read.csv
函数使用pandas打开它,直到它正确显示。尝试编码:
import pandas as pd
df = pd.read_csv(r'C:yourpath',encoding = "latin-1")
如果这不起作用,请尝试类似的编码,直到找到为止
然后您可以根据需要使用正确的编码。如果我理解正确,您有一个带有
cp1252
编码的csv
文件。
如果是这种情况,您所要做的就是用正确的编码打开文件。
至于csv
,我将使用标准库中的模块。
或者,您可能希望查看更专业的库,如
无论如何,要解析您的csv
,您可以执行以下操作:
import csv
with open(filepath, 'r', encoding='cp1252') as file_obj:
# adjust the parameters according to your file, see docs for more
csv_obj = csv.reader(file_obj, delimiter='\t', quotechar='"')
for row in csv_obj:
# row is a list of entries
# this would print all entries, separated by commas
print(', '.join(row))
文件是什么语言?@gsa德语,但它不是我处理的唯一包含ä、ü、ö等的文件。
#-*-编码:utf-8-*-
将此放在文件的第一行。@gsa很抱歉这个天真的问题,但是在导入所有模块时,是否需要将其放在脚本的开头,还是在函数的第一行?我尝试了这两种方法,但得到了相同的错误。打开文件时是否尝试设置encoding
参数?类似这样:open(…,encoding='utf-8')
当打开csv
模块的文件时,总是设置newline='''
,因为csv模块透明地正确处理所有类型的行尾。谢谢,我有点搞不清楚如何将函数应用到具有正确编码的文件。我必须使用new_file=','.join(row)
作为我现在处理的数据吗?这是什么意思?csv_obj
基本上可以让您遍历行,并获得条目/单元格的列表。这完全取决于你自己。从这个意义上讲,若不需要将.csv
文件的一行作为字符串,则不必执行,'.join(row)
。