Yo soy estudiante haciendo mi tesis de maestría. Como parte de mi tesis, estoy trabajando con python. Estoy leyendo un archivo de registro de .csv formato y la escritura de los datos extraídos a otro .csv archivo en un formato de forma. Sin embargo, cuando se lee el archivo, estoy recibiendo este error:

Traceback (la mayoría de llamada reciente last): File
«C:\Users\SGADI\workspace\DAB_Trace\my_code\trace_parcer.py» la línea 19,
en fila en el lector:

  • Archivo «C:\Users\SGADI\Desktop\Python-32bit-3.4.3.2\python-3.4.3\lib\encodings\cp1252.py»,
    la línea 23, en decodificar volver codecs.charmap_decode(input,self.errors,decoding_table)[0]
  • UnicodeDecodeError: ‘mapcar’ codec no puede decodificar byte 0x8d en posición 7240: mapas de caracteres para <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()

He buscado por el carácter especial y no encontré ninguna. He buscado en la Internet que propuso cambiar el formato: traté de ut8, latin1 y algunos otros formatos, pero yo todavía estoy recibiendo este error. Puede usted por favor ayuda me a resolver con pandas así. También probé con pandas pero yo todavía estoy recibiendo el error.
Incluso he eliminado una línea en el archivo de registro, pero el error se produce en la línea siguiente.

Por favor me ayude a encontrar una solución, gracias.

  • Por favor enviar repr(open('test_log_20150325_gps.csv', 'rb').read(7290)[7190:]). Esto nos muestra algunos de los contenidos del archivo CSV alrededor de la 7240th byte. El uso que le podría ser capaz de adivinar cuál es la probabilidad de códec.
  • Tengo esta como en la consola cuando me envió el comando anterior b’XPMSG_OPCODE_SET_CONTROL_FLAGS_CMD;;;;;;;;;RR=2 OP=DAB_NXPMSG_OPCODE_SET_CONTROL_FLAGS_CMD CAVisibil’
  • Algo que es incoherente aquí, ya que no hay ningún byte '\x8d' en el repr que has publicado. Puedes publicar test_log_20150325_gps.csv?
  • aquí está el enlace para el archivo drive.google.com/…

2 Comentarios

  1. 5

    me han resuelto este problema.
    podemos utilizar este código

    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
    ....
    ....
  2. 1
    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'

Dejar respuesta

Please enter your comment!
Please enter your name here