test.txt
и test_é.txt
- это один и тот же файл, меняется только имя:
pd.read_csv('test.txt')
Out[3]:
1 1 1
0 1 1 1
1 1 1 1
pd.read_csv('test_é.txt')
Traceback (most recent call last):
File "<ipython-input-4-fd67679d1d17>", line 1, in <module>
pd.read_csv('test_é.txt')
File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 646, in parser_f
return _read(filepath_or_buffer, kwds)
File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 389, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 730, in __init__
self._make_engine(self.engine)
File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 923, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "d:\app\python36\lib\site-packages\pandas\io\parsers.py", line 1390, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "pandas\parser.pyx", line 373, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:4184)
File "pandas\parser.pyx", line 669, in pandas.parser.TextReader._setup_parser_source (pandas\parser.c:8471)
OSError: Initializing from file failed
Pandas возвращает OSError при попытке прочитать файл с акцентами в пути к файлу.
Проблема новая (поскольку я обновился до Python 3.6 и Pandas 0.19.2)
pd.show_versions()
коммит: Нет
питон: 3.6.0.final.0
биты Python: 64
ОС: Windows
ОС-релиз: 7
машина: AMD64
процессор: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder: маленький
LC_ALL: Нет
ЯЗЫК: fr
МЕСТО: Нет.
панды: 0.19.2
нос: нет
пункт: 9.0.1
setuptools: 32.3.1
Cython: 0,25,2
число: 1.11.3
scipy: 0.18.1
statsmodels: Нет
xarray: Нет
IPython: 5.1.0
сфинкс: 1.5.1
Пэтси: Нет
dateutil: 2.6.0
pytz: 2016.10
blosc: Нет
узкое место: 1.2.0
столы: Нет
numexpr: 2.6.1
matplotlib: 1.5.3
openpyxl: Нет
xlrd: Нет
xlwt: Нет
xlsxwriter: Нет
lxml: Нет
bs4: Нет
html5lib: 0,999999999
httplib2: Нет
apiclient: Нет
sqlalchemy: 1.1.4
pymysql: Нет
psycopg2: Нет
jinja2: 2.9.3
бото: нет
pandas_datareader: Нет
Просто мои гроши стоят. Быстро опробовал на Mac OSX и Ubuntu без
проблемы. Смотри ниже.
Может ли это быть проблемой среды / платформы? Я заметил, что LOCALE
- это
установлен в None.None
. К сожалению, у меня нет Windows-машины, чтобы попробовать это
пример на. По общему признанию, это не объясняет, почему вы видели это после
обновитесь до python3.6 и pandas 0.19.2.
Примечание: я только что установил virtualenv с python3.6 и установил pandas 0.19.2 с помощью pip.
>>> import pandas as pd
>>> pd.read_csv('test_é.txt')
a b c
0 1 2 3
1 4 5 6
Вывод pd.show_versions ()
УСТАНОВЛЕННЫЕ ВЕРСИИ
коммит: Нет
питон: 3.6.0.final.0
биты Python: 64
ОС: Linux
Релиз ОС: 4.4.0-57-generic
машина: x86_64
процессор: x86_64
byteorder: маленький
LC_ALL: Нет
ЯЗЫК: en_GB.UTF-8
МЕСТО: en_GB.UTF-8
панды: 0.19.2
нос: нет
пункт: 9.0.1
setuptools: 32.3.1
Cython: Нет
число: 1.11.3
scipy: Нет
statsmodels: Нет
xarray: Нет
IPython: нет
сфинкс: нет
Пэтси: Нет
dateutil: 2.6.0
pytz: 2016.10
blosc: Нет
узкое место: нет
столы: Нет
numexpr: нет
matplotlib: Нет
openpyxl: Нет
xlrd: Нет
xlwt: Нет
xlsxwriter: Нет
lxml: Нет
bs4: Нет
html5lib: Нет
httplib2: Нет
apiclient: Нет
sqlalchemy: Нет
pymysql: Нет
psycopg2: Нет
jinja2: Нет
бото: нет
pandas_datareader: Нет
Я считаю, что 3.6 переключает кодировку файловой системы в Windows на utf8 (из ascii). Кроме того, у нас еще нет возможности тестирования для Windows для 3.6 (поскольку некоторые из необходимых пакетов только сейчас становятся доступными).
@JGoutin
поэтому я только что добавил поддержку сборки в appveyor (windows) для версии 3.6, так что, если вы запустите свои тесты, чтобы увидеть, работает ли это, было бы здорово.
Я также столкнулся с той же проблемой, когда программа остановилась на pd.read_csv (file_path). Ситуация похожа на меня после того, как я обновил свой питон до 3.6 (я не уверен, что в последний раз установленный мной питон - это именно та версия, может быть, 3.5 ...).
@jreback какой следующий шаг к исправлению здесь?
Вы упомянули пиар, который «улетел» - что это значит?
Хотя я не использую Windows, я мог бы попытаться помочь (только что получил виртуальную машину для отладки фрагмента моего кода, который, по-видимому, не работает в Windows)
Кстати, обходной путь: передайте дескриптор файла вместо имени
pd.read_csv(open('test_é.txt', 'r'))
(есть несколько способов решения связанных проблем, но я не видел этого)
@tpietruszka см. комментарии к PR: https://github.com/pandas-dev/pandas/pull/15092 (он был удален из приватной вилки, там было довольно много).
вам в основном нужно кодировать пути по-разному на py3.6 (по сравнению с другими питонами) на wnidows. в основном необходимо реализовать: https://docs.python.org/3/whatsnew/3.6.html#pep -529-change-windows-filesystem-encoding-to-utf-8
мой старый код (не могу работать):
import pandas as pd
import os
file_path='./dict/字典.csv'
df_name = pd.read_csv(file_path,sep=',' )
новый код (успешно):
import pandas as pd
import os
file_path='./dict/dict.csv'
df_name = pd.read_csv(file_path,sep=',' )
Я думаю, что эта ошибка связана с проблемой имени файла.
Я меняю имя файла с китайского на английский, теперь он может работать.
Если кто-то приходит сюда, как я, потому что он / она столкнулся с той же проблемой, вот решение, пока pandas не будет исправлен для работы с pep 529 (в основном, любые символы, отличные от ascii, будут на вашем пути или в имени файла, приведут к ошибкам):
Вставьте следующие две строки в начало кода, чтобы вернуться к старому способу обработки путей в Windows:
import sys
sys._enablelegacywindowsfsencoding()
Я использую вышеуказанное решение, и оно работает. Большое спасибо @fotisj !
Однако я все еще не понимаю, почему DataFrame.to_csv () не вызывает такой же проблемы. Другими словами, для пути к файлу в формате Unicode запись разрешена, а чтение - нет.
путь = os.path.join ('E: \ 语料', 'sina.csv')
pd.read_csv (open (путь, 'r', кодировка = 'utf8'))
Это успешно.
Может ли кто-нибудь с затронутой системой проверить, изменяет ли эта строка
к
return _expand_user(os.fsencode(filepath_or_buffer)), None, compression
это исправляет?
Нет.
Результат: OSError: Ожидаемое имя пути к файлу или файловый объект, получен
(в Windows 10)
OSError Traceback (most recent call last)
<ipython-input-2-e8247998d6d4> in <module>()
1
----> 2 df = pd.read_csv(r'D:\mydata\Dropbox\uni\progrs\test öäau\n\teu.csv', sep='\t')
C:\conda\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision)
707 skip_blank_lines=skip_blank_lines)
708
--> 709 return _read(filepath_or_buffer, kwds)
710
711 parser_f.__name__ = name
C:\conda\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
447
448 # Create the parser.
--> 449 parser = TextFileReader(filepath_or_buffer, **kwds)
450
451 if chunksize or iterator:
C:\conda\lib\site-packages\pandas\io\parsers.py in __init__(self, f, engine, **kwds)
816 self.options['has_index_names'] = kwds['has_index_names']
817
--> 818 self._make_engine(self.engine)
819
820 def close(self):
C:\conda\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
1047 def _make_engine(self, engine='c'):
1048 if engine == 'c':
-> 1049 self._engine = CParserWrapper(self.f, **self.options)
1050 else:
1051 if engine == 'python':
C:\conda\lib\site-packages\pandas\io\parsers.py in __init__(self, src, **kwds)
1693 kwds['allow_leading_cols'] = self.index_col is not False
1694
-> 1695 self._reader = parsers.TextReader(src, **kwds)
1696
1697 # XXX
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Ой, извини. Fsdecode там работает?
От: Фотис Джаннидис [email protected]
Отправлено: суббота, 3 февраля 2018 г., 8:00:13
Кому: pandas-dev / pandas
Копия: Том Аугспургер; Комментарий
Тема: Re: [pandas-dev / pandas] Ошибка OSError при чтении файла с акцентами в пути к файлу (# 15086)
Нет.
Результат: OSError: Ожидаемое имя пути к файлу или файловый объект, получен
-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362809602 или отключите поток https://github.com/notifications/unsubscribe-auth/ ABQHIplv8thHxpjsP3knUCpET0Fjy0kLks5tRGZsgaJpZM4LeTSB .
Нет. Использование fsdecode приводит к той же ошибке, которая была у нас изначально ( error_msg.txt )
Хорошо, спасибо за попытку.
От: Фотис Джаннидис [email protected]
Отправлено: суббота, 3 февраля 2018 г., 8:57:07
Кому: pandas-dev / pandas
Копия: Том Аугспургер; Комментарий
Тема: Re: [pandas-dev / pandas] Ошибка OSError при чтении файла с акцентами в пути к файлу (# 15086)
Нет. Использование fsdecode приводит к той же ошибке, которая была у нас изначально (error_msg.txt https://github.com/pandas-dev/pandas/files/1691837/error_msg.txt )
-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362818153 или отключите поток https://github.com/notifications/unsubscribe-auth/ ABQHIpeYsj9Bv3OsoHAsOufXzU3AYSBSks5tRHPCgaJpZM4LeTSB .
Сегодня поговорил со Стивом Дауэром, и он подозревает, что это может быть проблемная строка: https://github.com/pandas-dev/pandas/blob/e8f206d8192b409bc39da1ba1b2c5bcd8b65cc9f/pandas/_libs/src/parserL30/io.c
IIUC, API файловой системы Windows ожидает, что эти байты будут в MBCS, но мы используем utf-8.
Обходной путь на уровне пользователя - явно закодировать ваше имя файла как mbcs перед передачей байтовой строки в pandas. https://www.python.org/dev/peps/pep-0529/#explicitly -using-mbcs
pd.read_csv(filename.encode('mbcs'))
Кто-нибудь может проверить это обходное решение?
просто нужно небольшое изменение в коде парсера, чтобы исправить это (это был PR), но был удален
@TomAugspurger, что не работает. read_csv ожидает значение str
а не bytes
. Это не срабатывает с
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Спасибо за проверку.
Пт, 20 апреля 2018 г., в 15:43, Жоао Д. Феррейра [email protected]
написал:
@TomAugspurger https://github.com/TomAugspurger , который не работает.
read_csv ожидает значение str, а не байтов. Это не срабатывает сOSError: ожидаемый путь к файлу или файловый объект, получен
тип -
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/pandas-dev/pandas/issues/15086#issuecomment-383217062 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ABQHIiOHyt3sT7B0pHJuY5lB-cJtT5JHks5tqkiEgaJpZM4LeTSB
.
Просто проверьте это - у меня такая же проблема, я использую обходной путь, но было бы здорово, если бы это не требовалось.
для этого нужен патч сообщества
Я столкнулся с этой проблемой. Я хочу попробовать внести патч. Есть какие-нибудь указания о том, как это исправить?
Я думаю, что ни у кого из сопровождающих нет доступа к системе, которая может это воспроизвести.
Возможно, кто-то из участников этого вопроса поможет найти решение.
Привет, у меня есть эта проблема на pandas 1.0.3
сейчас, и обходной путь sys._enablelegacywindowsfsencoding()
перестал работать. У меня есть ą
и ź
в пути к файлу.
Я получаю эту ошибку также на pandas 0.25.3
но 0.23.4
похоже, работает нормально при использовании обходного пути (я не проверял другие версии). Буду рад предоставить любую дополнительную информацию.
Удалите файл из папки с тем же именем, например, если ваш файл хранится в той же папке, что и файл.
Просто удалите файл из этой папки.
не храните файл в папке с тем же именем.
тогда это работает
@pranjulknit Если я понимаю, вы предлагаете переместить файл в папку без этих проблемных символов в пути. Это не всегда возможно. Если вы предлагаете, чтобы имена папок и файлов были разными - это не та проблема, которая описана здесь, у меня никогда не было проблем с этим.
На самом деле у меня эта проблема при чтении файла csv из ноутбука jupyter.
Самый полезный комментарий
Если кто-то приходит сюда, как я, потому что он / она столкнулся с той же проблемой, вот решение, пока pandas не будет исправлен для работы с pep 529 (в основном, любые символы, отличные от ascii, будут на вашем пути или в имени файла, приведут к ошибкам):
Вставьте следующие две строки в начало кода, чтобы вернуться к старому способу обработки путей в Windows: