web-dev-qa-db-ja.com

UnicodeDecodeError: 'charmap'コーデックは7240の位置にあるバイト0x8dをデコードできません:文字は<undefined>にマップされます

私は修士論文を書いている学生です。私の論文の一部として、私はpythonで作業しています。 _.csv_形式のログファイルを読み取り、抽出したデータを別の_.csv_ファイルに適切な形式で書き込んでいます。ただし、ファイルを読み取ると、次のエラーが発生します。

トレースバック(最後の最後の呼び出し):ファイル "C:\ Users\SGADI\workspace\DAB_Trace\my_code\trace_parcer.py"、19行目、リーダーの行:

  • ファイル "C:\ Users\SGADI\Desktop\Python-32bit-3.4.3.2\python-3.4.3\lib\encodings\cp1252.py"、23行目、デコードでcodecs.charmap_decode(input,self.errors,decoding_table)[0]
  • UnicodeDecodeError: 'charmap'コーデックは位置7240のバイト0x8dをデコードできません:文字は_<undefined>_にマップされます
_import csv
import re
#import matplotlib
#import matplotlib.pyplot as plt
import datetime
#import pandas
#from dateutil.parser import parse
#def parse_csv_file():
timestamp = datetime.datetime.strptime('00:00:00.000', '%H:%M:%S.%f')
timestamp_list = []
snr_list = []
freq_list = []
rssi_list = []
dab_present_list = []
counter = 0
f =  open("output.txt","w")
with open('test_log_20150325_gps.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=';') 
    for row in reader:
        #timestamp = datetime.datetime.strptime(row[0], '%M:%S.%f')
        #timestamp.split(" ",1)

        timestamp = row[0]
        timestamp_list.append(timestamp)


        #timestamp = row[0]
        details = row[-1]
        counter += 1
        print (counter)
        #if(counter > 25000):
        #  break
        #timestamp = datetime.datetime.strptime(row[0], '%M:%S.%f')  



        #timestamp_list.append(float(timestamp))

        #search for SNRLevel=\d+
        snr = re.findall('SNRLevel=(\d+)', details)
        if snr == []:
            snr = 0
        else:
            snr = snr[0]
        snr_list.append(int(snr))

        #search for Frequency=09ABC
        freq = re.findall('Frequency=([0-9a-fA-F]+)', details)
        if freq == []:
            freq = 0
        else:
            freq = int(freq[0], 16)
        freq_list.append(int(freq))

        #search for RSSI=\d+
        rssi = re.findall('RSSI=(\d+)', details)
        if rssi == []:
            rssi = 0
        else:
            rssi = rssi[0]
        rssi_list.append(int(rssi))

        #search for DABSignalPresent=\d+
        dab_present = re.findall('DABSignalPresent=(\d+)', details)
        if dab_present== []:
            dab_present = 0
        else:
            dab_present = dab_present[0]
        dab_present_list.append(int(dab_present))

        f.write(str(timestamp) + "\t")
        f.write(str(freq) + "\t")
        f.write(str(snr) + "\t")
        f.write(str(rssi) + "\t")
        f.write(str(dab_present) + "\n")
        print (timestamp, freq, snr, rssi, dab_present)

        #print (index+1)

        #print(timestamp,freq,snr)
        #print (counter)
#print(timestamp_list,freq_list,snr_list,rssi_list)


'''if  snr != []:
           if freq != []:
               timestamp_list.append(timestamp)
               snr_list.append(snr)
               freq_list.append(freq)
f.write(str(timestamp_list) + "\t")
f.write(str(freq_list) + "\t")
f.write(str(snr_list) + "\n")

print(timestamp_list,freq_list,snr_list)'''
f.close()
_

特殊文字を検索しましたが、見つかりませんでした。フォーマットの変更を提案するインターネットを検索しました。ut8、latin1、およびその他のいくつかのフォーマットを試しましたが、それでもこのエラーが発生します。 pandasでも解決する方法を教えてください。 pandasも試してみましたが、それでもエラーが発生します。ログファイルの行も削除しましたが、次の行でエラーが発生します。

私が解決策を見つけるのを手伝ってください、ありがとう。

私はこの問題を解決しました。このコードを使用できます

import codecs
types_of_encoding = ["utf8", "cp1252"]
for encoding_type in types_of_encoding:
    with codecs.open(filename, encoding = encoding_type, errors ='replace') as csvfile:
        your code
        ....
        ....
with open('input.tsv','rb') as f:
for ln in f:
    decoded=False
    line=''
    for cp in ('cp1252', 'cp850','utf-8','utf8'):
        try:
            line = ln.decode(cp)
            decoded=True
            break
        except UnicodeDecodeError:
            pass
    if decoded:
        # use 'line'
2
Palash Kumar

Open()にパラメータを追加するだけで、この問題を解決しました。

with open(filename, encoding = 'cp850') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
0
Kenneth So