Преобразование файла .arff в .csv с помощью Python

У меня есть файл «LMD.rh.arff», который я пытаюсь преобразовать в файл .csv, используя следующий код:

import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import arff


# Read in .arff file-
data = arff.loadarff("LMD.rh.arff")

Но эта последняя строка кода дает мне ошибку-

-------------------------------------------------- ------------------------- UnicodeEncodeError Traceback (последний последний вызов) в ----> 1 data = arff.loadarff("LMD.rp .arff")

~/.local/lib/python3.6/site-packages/scipy/io/arff/arffread.py в loadarff(f) 539 ofile = open(f, 'rt') 540 try: --> 541 return _loadarff( ofile) 542 finally: 543 if ofile не f: # закрываем только то, что открыли

~/.local/lib/python3.6/site-packages/scipy/io/arff/arffread.py in _loadarff(ofile) 627 a = генератор(ofile) 628 # Здесь не должно быть ошибок: иначе это ошибка - -> 629 data = np.fromiter(a, descr) 630 возвращаемые данные, мета 631

UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xf3» в позиции 4: порядковый номер не в диапазоне (128)

В [6]: data = arff.loadarff("LMD.rh.arff")

-------------------------------------------------- ------------------------- UnicodeEncodeError Traceback (последний последний вызов) в ----> 1 data = arff.loadarff("LMD.rh .arff")

~/.local/lib/python3.6/site-packages/scipy/io/arff/arffread.py в loadarff(f) 539 ofile = open(f, 'rt') 540 try: --> 541 return _loadarff( ofile) 542 finally: 543 if ofile не f: # закрываем только то, что открыли

~/.local/lib/python3.6/site-packages/scipy/io/arff/arffread.py in _loadarff(ofile) 627 a = генератор(ofile) 628 # Здесь не должно быть ошибок: иначе это ошибка - -> 629 data = np.fromiter(a, descr) 630 возвращаемые данные, мета 631

UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xf3» в позиции 4: порядковый номер не в диапазоне (128)

Вы можете скачать файл arff_file

Любые идеи относительно того, что происходит не так?

Спасибо!


person Arun    schedule 12.04.2019    source источник


Ответы (2)


Попробуй это

path_to_directory="./"
files = [arff for arff in os.listdir(path_to_directory) if arff.endswith(".arff")]

def toCsv(content): 
    data = False
    header = ""
    newContent = []
    for line in content:
        if not data:
            if "@attribute" in line:
                attri = line.split()
                columnName = attri[attri.index("@attribute")+1]
                header = header + columnName + ","
            elif "@data" in line:
                data = True
                header = header[:-1]
                header += '\n'
                newContent.append(header)
        else:
            newContent.append(line)
    return newContent

# Main loop for reading and writing files
for zzzz,file in enumerate(files):
    with open(path_to_directory+file , "r") as inFile:
        content = inFile.readlines()
        name,ext = os.path.splitext(inFile.name)
        new = toCsv(content)
        with open(name+".csv", "w") as outFile:
            outFile.writelines(new)
person Shubham Mishra    schedule 07.10.2020

Посмотрите на трассировку ошибки

UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xf3» в позиции 4: порядковый номер не в диапазоне (128)

Ваша ошибка предполагает, что у вас есть проблема с кодировкой файла. Попробуйте сначала открыть файл с правильной кодировкой, а затем загрузить его в загрузчик arff.

import codecs
import arff

file_ = codecs.load('LMD.rh.arff', 'rb', 'utf-8') # or whatever encoding you have 
arff.load(file_) # now this should be fine

Для справки см. здесь

person Saif Asif    schedule 12.04.2019
comment
когда я пробую строку codecs.load(), она говорит: AttributeError: модуль 'codecs' не имеет атрибута 'load' - person Arun; 12.04.2019
comment
Я попробовал следующий код: f = codecs.open(LMD.rh.arff, r, utf-8) data = arff.loadarff(f) Однако возникает та же ошибка. - person Arun; 12.04.2019