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
尝试读取文件路径中带有重音符号的文件时,熊猫会返回OSError。
问题是新的(自从我升级到Python 3.6和Pandas 0.19.2以来)
pd.show_versions()
提交:无
的Python:3.6.0.final.0
python位:64
操作系统:Windows
操作系统版本:7
机器:AMD64
处理器:Intel64 Family 6 Model 94 Steping 3,正版英特尔
字节序:小
LC_ALL:无
朗:fr
地点:无。无
熊猫:0.19.2
鼻子:无
点:9.0.1
setuptools:32.3.1
Cython:0.25.2
numpy的:1.11.3
scipy:0.18.1
statsmodels:无
xarray:无
IPython:5.1.0
狮身人面像:1.5.1
patsy:无
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
boto:无
pandas_datareader:无
只是我的几分钱值得。 在Mac OSX和Ubuntu上快速试用,没有
问题。 见下文。
这可能是环境/平台问题吗? 我注意到LOCALE
是
设置为None.None
。 不幸的是我没有Windows机器来尝试
例子。 诚然,这不能解释为什么你后看到了这一点
升级到python3.6和pandas 0.19.2。
注意:我只是使用python3.6设置了virtualenv,并使用pip安装了熊猫0.19.2。
>>> import pandas as pd
>>> pd.read_csv('test_é.txt')
a b c
0 1 2 3
1 4 5 6
pd.show_versions()的输出
安装的版本
提交:无
的Python:3.6.0.final.0
python位:64
操作系统:Linux
操作系统版本:4.4.0-57-通用
机器:x86_64
处理器:x86_64
字节序:小
LC_ALL:无
朗:en_GB.UTF-8
本地:en_GB.UTF-8
熊猫:0.19.2
鼻子:无
点:9.0.1
setuptools:32.3.1
Cython:无
numpy的:1.11.3
scipy:无
statsmodels:无
xarray:无
IPython:无
狮身人面像:无
patsy:无
dateutil的:2.6.0
pytz:2016.10
blosc:无
瓶颈:无
桌子:无
numexpr:无
matplotlib:无
openpyxl:无
xlrd:无
xlwt:无
xlsxwriter:无
lxml:无
bs4:无
html5lib:无
httplib2:无
apiclient:无
sqlalchemy:无
pymysql:无
psycopg2:无
jinja2:无
boto:无
pandas_datareader:无
我相信3.6会将Windows上的文件系统编码切换为utf8(来自ascii)。 除此之外,我们还没有在Windows 3.6上启用测试(因为一些必需的软件包刚刚可用)。
@JGoutin
所以我刚刚在3.6的appveyor(windows)上添加了构建支持,所以如果您要提高测试以查看它是否有效,那就太好了。
当程序停止在pd.read_csv(file_path)时,我也面临相同的问题。 在我将python升级到3.6之后,情况与我类似(我不确定我上次安装的python到底是什么版本,也许是3.5 ......)。
@jreback在这里进行修复的下一步是什么?
您提到的PR被“吹走”了-这是什么意思?
虽然我不使用Windows,但是我可以尝试提供帮助(只是让一台VM调试了我的一段显然在Windows上无法运行的代码)
顺便说一句,一种解决方法:传递文件句柄而不是名称pd.read_csv(open('test_é.txt', 'r'))
(相关问题中有几种解决方法,但我没有看到这一方法)
我的旧代码(无法运行):
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=',' )
我认为此错误是文件名问题。
我将文件名从中文更改为英文,现在可以运行了。
如果有人像我一样来这里,因为他/她遇到了同样的问题,这是一个解决方法,直到将熊猫修复为可与pep 529一起使用(基本上,路径中的任何非ascii字符或文件名都会导致错误):
在代码的开头插入以下两行,以恢复为处理Windows路径的旧方法:
import sys
sys._enablelegacywindowsfsencoding()
我使用上面的解决方案,它可以工作。 非常感谢@fotisj !
但是我仍然对为什么DataFrame.to_csv()不会出现相同的问题感到困惑。 换句话说,对于unicode文件路径,可以写,而不能读。
path = os.path.join('E:\语料','sina.csv')
pd.read_csv(open(path,'r',encoding ='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在那工作吗?
来自:Fotis Jannidis [email protected]
发送:2018年2月3日,星期六,8:00:13 AM
至: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 )
好,谢谢您的尝试。
来自:Fotis Jannidis [email protected]
发送:2018年2月3日,星期六8:57:07 AM
至: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/ ABQHIpeYsj9Bv3OsoHAsOufXzU3AYSBSksks5tRHPCgaJpZM4LeTSB 。
今天与史蒂夫·道尔(Steve Dower)进行了交谈,他怀疑这可能是有问题的线路: https :
Windows文件系统API IIUC期望这些字节位于MBCS中,但我们使用的是utf-8。
用户级别的解决方法是在将字节字符串传递给pandas之前,将文件名显式编码为mbcs。 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
感谢您的检查。
在2018年4月20日星期五,下午3:43,JoãoD.Ferreira [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
。
只是ping通-我也有同样的问题,我正在使用一种解决方法,但是如果不需要这样做,那就太好了。
这需要一个社区补丁
我遇到这个问题。 我想尝试并贡献一个patchc关于如何开始解决此问题的任何指示?
我认为没有一个维护者可以访问可以重现此问题的系统。
也许其他一些问题可以帮助提出一个解决方案。
嗨,我现在在熊猫1.0.3
上遇到sys._enablelegacywindowsfsencoding()
解决方法停止了工作。 我的文件路径中有ą
和ź
。
我在熊猫0.25.3
上也遇到此错误,但使用替代方法时, 0.23.4
似乎工作正常(我没有检查其他版本)。 我很乐意提供任何其他信息。
如果您的文件与文件存储在相同的文件夹名称中,请从相同的文件夹名称中删除文件。
只需从该文件夹中删除文件即可。
不要将文件存储在相同的文件夹名称中。
然后,它起作用
@pranjulknit如果我了解您的建议,请将该文件移动到路径中没有这些问题字符的文件夹中。 这并不总是可能的。 如果您建议文件夹名称和文件名应该不同-这不是此处描述的问题,那么我从来没有遇到过问题。
实际上,从jupyter笔记本读取csv文件时遇到了这个问题。
最有用的评论
如果有人像我一样来这里,因为他/她遇到了同样的问题,这是一个解决方法,直到将熊猫修复为可与pep 529一起使用(基本上,路径中的任何非ascii字符或文件名都会导致错误):
在代码的开头插入以下两行,以恢复为处理Windows路径的旧方法: