pythonとstackoverflowの新機能です。Pythonでcsvファイルを読み込もうとするとUnicodeのデコードエラーが発生する
- 私はcsvファイルのフォルダを持っており、各ファイルからフィールド名を読み込み、新しいcsvファイルに書き込もうとしています。
- stackoverflowのおかげで、私はユニコードエラーが出てくるまで自分のコードを作り編集することができました。
- 私はこのエラーを解決しようと努力して研究しました。
- MacまたはLinuxで作成されたファイルにはutf8ユニコードがあり、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
が、私はユニコードエラーを修正しようとした方法である:
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')
を使用すると動作しますが、filenameの隣に '\ ufeff'があります。
私はこのファイルがtry:
で開かれていて、まだクローズされていないと考えています。したがって、このファイルは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申し訳ありません。私はベストを尽くしましたが、私のコードと私の質問の両方が面倒です。 –
の 'file not found'エラーが発生しました。コードが' C:/ dataset/'を作業ディレクトリとして使用していることを確認してください。 'os.getcwd()'を使って調べることができます。私はエンコーディングについてはわかりません。 – Stael