我不熟悉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