python读取csv文件编码出错_尝试在python中读取csv文件时出现Unicode解码错误

我不熟悉python和stackoverflow。在我有一个包含csv文件的文件夹,我试图从每个文件中读取字段名并将它们写入新的csv文件中。在

多亏了stackoverflow,我能够编写和编辑代码,直到unicode错误出现。在

我尽力解决这个错误并做了研究。在

我发现在Mac或Linux中创建的文件使用utf8 unicode,在windows中创建的文件使用cp949。在

因此,我必须用utf8打开它们。在

我的代码最初是这样的:import csv

import glob

lst=[]

files=glob.glob('C:/dataset/*.csv')

with open('test.csv','w',encoding='cp949',newline='') as testfile:

csv_writer=csv.writer(testfile)

for file in files:

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

file=file[file.rfind('\\')+1:]

reader=csv.reader(infile)

headers=next(reader)

headers=[str for str in headers if str]

while len(headers) < 3 :

headers=next(reader)

headers=[str for str in headers if str]

lst=[file]+headers

csv_writer.writerow(lst)

然后这个错误出现了:

^{pr2}$

下面是我如何修复unicode错误:import csv

import glob

lst=[]

files=glob.glob('C:/dataset/*.csv')

with open('test.csv','w',encoding='cp949',newline='') as testfile:

csv_writer=csv.writer(testfile)

for file in files:

try:

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

file=file[file.rfind('\\')+1:]

reader=csv.reader(infile)

headers=next(reader)

headers=[str for str in headers if str]

while len(headers) < 3 :

headers=next(reader)

headers=[str for str in headers if str]

lst=[file]+headers

csv_writer.writerow(lst)

except:

with open(file,'r',encoding='utf8') as infile:

file=file[file.rfind('\\')+1:]

reader=csv.reader(infile)

headers=next(reader)

headers=[str for str in headers if str]

while len(headers) < 3 :

headers=next(reader)

headers=[str for str in headers if str]

lst=[file]+headers

csv_writer.writerow(lst)

这个错误出现了:

^{pr2}$

在处理上述异常时,发生了另一个异常:Traceback (most recent call last):

File "C:\Python35\2.py", line 20, in

with open(file,'r',encoding='utf8') as infile:

FileNotFoundError: [Errno 2] No such file or directory: '2010_1_1.csv'

文件'2010_1_1.csv'肯定存在于我的目录('C:/dataset/*.csv')

当我尝试使用open('C:/dataset/2010_1_1.csv','r',encoding='utf8')单独打开这个文件时,它可以工作,但是文件名旁边有'\ufeff'。在

我不确定,但我猜这个文件是在try:中打开的,而且还没有关闭,因此python无法在except打开这个文件。在

如何编辑代码以解决此Unicode问题?在import glob

from chardet.universaldetector import UniversalDetector

files=glob.glob('C:/example/*.csv')

for filename in files:

print(filename.ljust(60)),

detector.reset()

for line in file(filename, 'rb'):

detector.feed(line)

if detector.done: break

detector.close()

print(detector.result)

错误:Traceback (most recent call last):

File "", line 4, in

for line in file(filename, 'rb'):

TypeError: 'str' object is not callable


版权声明:本文为weixin_26741799原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。