2017-02-08 7 views
0

Мне нужно прочитать содержимое файла csv с помощью Python. Однако, когда я запускаю этот код:Как решить проблему с кодировкой?

with(open(self.path, 'r')) as csv_file: 
    csv_reader = csv.reader(csv_file, dialect=csv.excel, delimiter=';') 
    self.data = [[cell for cell in row] for row in csv_reader] 

Я получаю эту ошибку:

File "C:\Python36\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1137: character maps to <undefined> 

Я понимаю, что этот файл не был закодирован в ф-1252, и что мне нужно, чтобы выяснить, какая кодировка была используемый. Я попробовал кучу вещей, но теперь ничего не получилось.

О файле:

  • Он отправляется внешней компанией, я не могу иметь больше информации о нем.
  • Он поставляется с другими подобными файлами, с которыми у меня нет какого-либо вопроса, когда я запускаю тот же код
  • имеет расширение .xls, но больше файла CSV разделители точки с запятой
  • Когда я открываю он с Excel открывается в режиме совместимости. Но я не вижу никакой проблемы с кодировкой: все отображается правильно.

Я уже пробовал:

  • Сохранение под другим форматом файла, чтобы избавиться от режима совместимости
  • Добавление кодировки в первой строке моего кода: (I пытались более или менее случайно некоторые кодировки, которые я знаю)

    с открытой ((self.path, 'R', кодирование = 'utf8')) как csv_file:

  • Скопируйте содержимое файла в новый файл или удалите все содержимое файла. Все еще не работает. Это действительно вызывает ошибку, потому что я чувствую, что это означает, что проблема не в содержимом файла, а не в самом файле.

  • Поиск по всему миру, как решить эту проблему.
+0

Вы можете попробовать прочитать файл, используя 'pandas' или' openpyxl'. –

+0

Python 2 или Python 3? (Может быть актуальным). – nigel222

+0

Если он открывается прямо в Excel, попробуйте сохранить Excel из другого CSV-файла. Это может привести к устранению проблем с кодировкой без необходимости выяснять, что именно не так. Или это может не ... – nigel222

ответ

0

я, наконец, нашел какое-то решение:!

  1. Открыть файл с Excel
  2. Отобразите файл должным образом, используя функция «Текст в столбцы»
  3. Сохраните файл в формате csv
  4. Запустить t он код

Это не совсем удовлетворяет меня, но оно работает. Я до сих пор не понимаю, в чем проблема, и почему это ее решило, поэтому меня интересует любая дополнительная информация!

0

Я рекомендую использовать библиотеку pandas (а также numpy), это очень удобно, когда дело касается манипуляций с данными. Эта функция импортирует данные из типа файла xlsx или csv.

/\ Изменение datapath в соответствии с вашими потребностями/\

import os 
import pandas as pd 

def GetData(directory, dataUse, format): 
    dataPath = os.getcwd() + "\\Data\\" + directory + "\\" + dataUse + "Set." + format 
    if format == "xlsx": 
     dataSet = pd.read_excel(dataPath, sheetname = 'Sheet1') 
    elif format == "csv": 
     dataSet = pd.read_csv(dataPath) 
    return dataSet 
+0

Это не решает проблему. Я получаю сообщение об ошибке: 'Файл« pandas \ parser.pyx », строка 535, в pandas.parser.TextReader .__ cinit__ (pandas \ parser.c: 6086) Файл« pandas \ parser.pyx », строка 740, в pandas.parser.TextReader._get_header (pandas \ parser.c: 9266) UnicodeDecodeError: 'utf-8' кодек не может декодировать байт 0xd0 в позиции 0: недопустимый остаток продолжения – adurivault

+0

знаете ли вы, как ваш файл закодирован? –

+0

Нет, я не ... Я пытался выяснить, но мне это не удалось, – adurivault