在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
,但如果I
open('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)