我是python和stackoverflow的新手。嘗試讀取python中的csv文件時的Unicode解碼錯誤
- 我有一個文件夾與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)
那麼這個錯誤就出來了:
Traceback (most recent call last):
File "C:\Python35\2.py", line 12, in <module>
headers=next(reader)
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 6: illegal multibyte sequence
這裏是我試圖修復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)
而這個錯誤c AME出來:
Traceback (most recent call last):
File "C:\Python35\2.py", line 12, in <module>
headers=next(reader)
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 6: illegal multibyte sequence
在處理上述異常,另一個異常:
Traceback (most recent call last):
File "C:\Python35\2.py", line 20, in <module>
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 "<pyshell#20>", line 4, in <module>
for line in file(filename, 'rb'):
TypeError: 'str' object is not callable
這是非常糟糕的格式。 – Nabin
@Nabin對不起..我盡我所能,但我的代碼和我的問題是凌亂。 –
for'file not found'錯誤,你確定你的代碼是以'C:/ dataset /'作爲其工作目錄嗎?你可以使用'os.getcwd()'來查明。我不確定編碼。 – Stael