test.txt
e test_é.txt
são o mesmo arquivo, apenas o nome muda:
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
O Pandas retorna OSError ao tentar ler um arquivo com acentos no caminho do arquivo.
O problema é novo (desde que atualizei para Python 3.6 e Pandas 0.19.2)
pd.show_versions()
commit: Nenhum
python: 3.6.0.final.0
python-bits: 64
SO: Windows
Versão do SO: 7
máquina: AMD64
processador: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder: pouco
LC_ALL: Nenhum
LANG: fr
LOCALE: Nenhum. Nenhum
pandas: 0.19.2
nariz: nenhum
pip: 9.0.1
ferramentas de configuração: 32.3.1
Cython: 0.25.2
numpy: 1.11.3
scipy: 0.18.1
modelos de estatísticas: nenhum
xarray: Nenhum
IPython: 5.1.0
esfinge: 1.5.1
patsy: nenhum
dateutil: 2.6.0
pytz: 2016.10
blosc: nenhum
gargalo: 1.2.0
tabelas: Nenhum
numexpr: 2.6.1
matplotlib: 1.5.3
openpyxl: Nenhum
xlrd: Nenhum
xlwt: Nenhum
xlsxwriter: Nenhum
lxml: Nenhum
bs4: Nenhum
html5lib: 0,999999999
httpplib2: Nenhum
apiclient: Nenhum
sqlalchemy: 1.1.4
pymysql: Nenhum
psycopg2: Nenhum
jinja2: 2.9.3
boto: Nenhum
pandas_datareader: Nenhum
Apenas meus centavos vale a pena. Testei rapidamente no Mac OSX e Ubuntu sem
problemas. Ver abaixo.
Isso poderia ser um problema de ambiente / plataforma? Notei que LOCALE
é
definido como None.None
. Infelizmente não tenho uma máquina Windows para tentar isso
exemplo em. Admito que isso não explicaria por que você viu isso depois do
atualize para python3.6 e pandas 0.19.2.
Nota: Acabei de configurar um virtualenv com python3.6 e instalei o pandas 0.19.2 usando pip.
>>> import pandas as pd
>>> pd.read_csv('test_é.txt')
a b c
0 1 2 3
1 4 5 6
Saída de pd.show_versions ()
VERSÕES INSTALADAS
commit: Nenhum
python: 3.6.0.final.0
python-bits: 64
SO: Linux
Versão do SO: 4.4.0-57-genérico
máquina: x86_64
processador: x86_64
byteorder: pouco
LC_ALL: Nenhum
LANG: en_GB.UTF-8
LOCALE: en_GB.UTF-8
pandas: 0.19.2
nariz: nenhum
pip: 9.0.1
ferramentas de configuração: 32.3.1
Cython: Nenhum
numpy: 1.11.3
scipy: nenhum
modelos de estatísticas: nenhum
xarray: Nenhum
IPython: Nenhum
esfinge: nenhuma
patsy: nenhum
dateutil: 2.6.0
pytz: 2016.10
blosc: nenhum
gargalo: Nenhum
tabelas: Nenhum
numexpr: nenhum
matplotlib: Nenhum
openpyxl: Nenhum
xlrd: Nenhum
xlwt: Nenhum
xlsxwriter: Nenhum
lxml: Nenhum
bs4: Nenhum
html5lib: Nenhum
httpplib2: Nenhum
apiclient: Nenhum
sqlalchemy: Nenhum
pymysql: Nenhum
psycopg2: Nenhum
jinja2: Nenhum
boto: Nenhum
pandas_datareader: Nenhum
Eu acredito que 3.6 muda a codificação do sistema de arquivos no windows para utf8 (de ascii). Além disso, ainda não temos o testing enable no Windows para 3.6 (já que alguns dos pacotes necessários estão agora disponíveis).
@JGoutin
então, acabei de adicionar suporte de compilação no appveyor (windows) para 3.6, portanto, se você forçar seus testes para ver se funciona, seria ótimo.
Também enfrentei o mesmo problema quando o programa parou em pd.read_csv (file_path). A situação é semelhante a minha depois que atualizei meu python para 3.6 (não tenho certeza se a última vez que o python que instalei é exatamente qual versão, talvez 3.5 ......).
@jreback qual é o próximo passo para corrigir isso?
Você mencionou um PR que foi 'surpreendido' - o que significa?
Embora eu não use o Windows, poderia tentar ajudar (acabei de obter uma VM para depurar um trecho do meu código que aparentemente não funciona no Windows)
BTW, uma solução alternativa: passe um identificador de arquivo em vez de um nome
pd.read_csv(open('test_é.txt', 'r'))
(existem várias soluções alternativas para problemas relacionados, mas eu não vi esta)
@tpietruszka veja os comentários no PR: https://github.com/pandas-dev/pandas/pull/15092 (foi removido de um fork privado, estava praticamente lá).
você basicamente precisa codificar os caminhos de maneira diferente no py3.6 (em comparação com outros pythons) no wnidows. basicamente precisa implementar: https://docs.python.org/3/whatsnew/3.6.html#pep -529-change-windows-filesystem-encoding-to-utf-8
meu código antigo (não pode ser executado):
import pandas as pd
import os
file_path='./dict/字典.csv'
df_name = pd.read_csv(file_path,sep=',' )
novo código (sucesso):
import pandas as pd
import os
file_path='./dict/dict.csv'
df_name = pd.read_csv(file_path,sep=',' )
Acho que esse bug é um problema de nome de arquivo.
Eu mudo o nome do arquivo de chinês para inglês, ele pode ser executado agora.
Se alguém vier aqui como eu porque encontrou o mesmo problema, aqui está uma solução até que o pandas seja corrigido para funcionar com pep 529 (basicamente qualquer caractere não ASCII em seu caminho ou nome de arquivo resultará em erros):
Insira as duas linhas a seguir no início de seu código para voltar à maneira antiga de lidar com caminhos em janelas:
import sys
sys._enablelegacywindowsfsencoding()
Eu uso a solução acima e funciona. Muito obrigado @fotisj !
No entanto, ainda estou confuso sobre porque DataFrame.to_csv () não ocorre o mesmo problema. Em outras palavras, para o caminho do arquivo Unicode, a escrita está ok, enquanto a leitura não.
path = os.path.join ('E: \ 语料', 'sina.csv')
pd.read_csv (abrir (caminho, 'r', codificação = 'utf8'))
É um sucesso.
Alguém com um sistema afetado pode verificar se está mudando esta linha
para
return _expand_user(os.fsencode(filepath_or_buffer)), None, compression
corrige isso?
Não, não tem.
Resultados em: OSError: Nome do caminho do arquivo esperado ou objeto semelhante a arquivo, obtido
(no 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
Oh, desculpe. O fsdecode funciona lá?
De: Fotis Jannidis [email protected]
Enviado: sábado, 3 de fevereiro de 2018 às 8:00:13
Para: pandas-dev / pandas
Cc: Tom Augspurger; Comente
Assunto: Re: [pandas-dev / pandas] OSError ao ler o arquivo com acentos no caminho do arquivo (# 15086)
Não, não tem.
Resultados em: OSError: Nome do caminho do arquivo esperado ou objeto semelhante a arquivo, obtido
-
Você está recebendo isto porque comentou.
Responda diretamente a este e-mail, visualize-o no GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362809602 ou ignore o tópico https://github.com/notifications/unsubscribe-auth/ ABQHIplv8thHxpjsP3knUCpET0Fjy0kLks5tRGZsgaJpZM4LeTSB .
Não. Usar fsdecode produz o mesmo erro que tínhamos originalmente ( error_msg.txt )
Ok, obrigado por tentar.
De: Fotis Jannidis [email protected]
Enviado: sábado, 3 de fevereiro de 2018 8:57:07
Para: pandas-dev / pandas
Cc: Tom Augspurger; Comente
Assunto: Re: [pandas-dev / pandas] OSError ao ler o arquivo com acentos no caminho do arquivo (# 15086)
Não. Usar fsdecode produz o mesmo erro que originalmente tínhamos (error_msg.txt https://github.com/pandas-dev/pandas/files/1691837/error_msg.txt )
-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub https://github.com/pandas-dev/pandas/issues/15086#issuecomment-362818153 ou ignore o tópico https://github.com/notifications/unsubscribe-auth/ ABQHIpeYsj9Bv3OsoHAsOufXzU3AYSBSks5tRHPCgaJpZM4LeTSB .
Conversei com Steve Dower hoje, e ele suspeita que esta pode ser a linha problemática: https://github.com/pandas-dev/pandas/blob/e8f206d8192b409bc39da1ba1b2c5bcd8b65cc9f/pandas/_libs/src/parser/io.c#L30
IIUC, a API do sistema de arquivos do Windows espera que esses bytes estejam no MBCS, mas estamos usando utf-8.
Uma solução alternativa no nível do usuário é codificar explicitamente o nome do arquivo como mbcs antes de passar a cadeia de bytes para o pandas. https://www.python.org/dev/peps/pep-0529/#explicitly -using-mbcs
pd.read_csv(filename.encode('mbcs'))
alguém é capaz de testar essa solução alternativa?
só preciso de uma pequena mudança no código do analisador para corrigir isso (havia um PR fazendo isso), mas foi excluído
@TomAugspurger que não funciona. read_csv espera um str
e não um bytes
. Falha com
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Obrigado por verificar.
Na sexta-feira, 20 de abril de 2018 às 15h43, João D. Ferreira [email protected]
escrevi:
@TomAugspurger https://github.com/TomAugspurger que não funciona.
read_csv espera um valor str e não bytes. Falha comOSError: Nome do caminho do arquivo esperado ou objeto semelhante a arquivo, obtido
tipo -
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/pandas-dev/pandas/issues/15086#issuecomment-383217062 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ABQHIiOHyt3sT7B0pHJuY5lB-cJtT5JHks5tqkiEgaJpZM4LeTSB
.
Estou apenas executando o ping - tenho o mesmo problema, estou usando uma solução alternativa, mas seria ótimo se isso não fosse necessário.
isso precisa de um patch da comunidade
Estou encontrando esse problema. Eu quero tentar contribuir com um patchc. Alguma sugestão sobre como começar a consertar isso?
Acho que nenhum dos mantenedores tem acesso a um sistema que pode reproduzir isso.
Talvez alguns dos outros nesta edição possam ajudar a encontrar uma solução.
Olá, tenho este problema nos pandas 1.0.3
agora e a solução alternativa sys._enablelegacywindowsfsencoding()
parou de funcionar. Tenho ą
e ź
no caminho do arquivo.
Também recebo este erro nos pandas 0.25.3
mas 0.23.4
parece estar funcionando bem ao usar a solução alternativa (não verifiquei as outras versões). Terei todo o gosto em fornecer quaisquer informações adicionais.
Remova o arquivo do mesmo nome de pasta, se o seu arquivo estiver armazenado no mesmo nome de pasta do arquivo.
Apenas remova o arquivo dessa pasta.
não armazene o arquivo no mesmo nome de pasta.
então funciona
@pranjulknit Se bem entendi, você sugere mover o arquivo para uma pasta sem esses caracteres problemáticos no caminho. Isto nem sempre é possível. Se você sugerir que os nomes das pastas e dos arquivos sejam diferentes - esse não é o problema descrito aqui, nunca tive problemas com isso.
Na verdade, eu tenho esse problema ao ler o arquivo csv do notebook jupyter.
Comentários muito úteis
Se alguém vier aqui como eu porque encontrou o mesmo problema, aqui está uma solução até que o pandas seja corrigido para funcionar com pep 529 (basicamente qualquer caractere não ASCII em seu caminho ou nome de arquivo resultará em erros):
Insira as duas linhas a seguir no início de seu código para voltar à maneira antiga de lidar com caminhos em janelas: