【问题标题】:Encoding with pandas.read_csv when file name has accents当文件名有重音符号时使用 pandas.read_csv 进行编码
【发布时间】:2014-07-25 11:38:18
【问题描述】:

我正在尝试使用 pandas 加载 CSV,但如果文件名带有重音符号,则会遇到问题。这显然是一个编码问题,但是虽然read_csv 允许您为文件中的文本设置编码,但我不知道如何正确编码文件名。

input_file = r'C:\...\Datasets\%s\Provinces\Points\%s.csv' % (country, province)
self.locs = pandas.read_csv(input_file,sep=',',skipinitialspace=True)

CSV 文件是 Anzoátegui.csv。当我遇到错误时,

input_file = 'C:\\...\Datasets\Venezuela\Provinces\Points\Anzoátegui.csv

错误代码:

OSError: File b'C:\\PF2\\QGIS Valmiera\\Datasets\\Venezuela\\Provinces\\Points\\Anzo\xc3\xa1tegui.csv' does not exist

所以也许它正在将我的字符串转换为字节?我也尝试使用io.StringIO(input_file),它将正确的文件名作为列标题放在一个空的DataFrame

Empty DataFrame
Columns: [C:\PF2\QGIS Valmiera\Datasets\Venezuela\Provinces\Points\Anzoátegui.csv]
Index: []

关于如何加载此文件的任何想法?不幸的是,我不能只去掉重音符号,因为我必须与需要正确名称的软件交互,而且我有大量文件要格式化(不仅仅是一个)。谢谢!

编辑:完全错误

Traceback (most recent call last):
  File "C:\PF2\eclipse-standard-kepler-SR2-win32-x86_64\eclipse\plugins\org.python.pydev_3.3.3.201401272249\pysrc\pydevd_comm.py", line 891, in doIt
    result = pydevd_vars.evaluateExpression(self.thread_id, self.frame_id, self.expression, self.doExec)
  File "C:\PF2\eclipse-standard-kepler-SR2-win32-x86_64\eclipse\plugins\org.python.pydev_3.3.3.201401272249\pysrc\pydevd_vars.py", line 486, in evaluateExpression
    result = eval(compiled, updated_globals, frame.f_locals)
  File "<string>", line 1, in <module>
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 404, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 486, in __init__
    self._make_engine(self.engine)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 594, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 952, in __init__
    self._reader = _parser.TextReader(src, **kwds)
  File "parser.pyx", line 330, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:3040)
  File "parser.pyx", line 557, in pandas.parser.TextReader._setup_parser_source (pandas\parser.c:5387)
OSError: File b'C:\\PF2\\QGIS Valmiera\\Datasets\\Venezuela\\Provinces\\Points\\Anzo\xc3\xa1tegui.csv' does not exist

【问题讨论】:

  • 你能比较一下os.listdir中的文件名吗?
  • 文件名在 os.listdir 中正确显示: os.listdir(path='C:\...\Datasets\Venezuela\Provinces\Points') ['Amazonas.csv', ' Anzoátegui.csv'、'Apure.csv'、'Aragua.csv'、'Barinas.csv'、'Bolívar.csv'、'Carabobo.csv'、'Cojedes.csv'、'Delta Amacuro.csv'、'Distrito Capital.csv'、'Falcón.csv'、'Guárico.csv'、'Lara.csv'、'Miranda.csv'、'Monagas.csv'、'Mérida.csv'、'Nueva Esparta.csv'、'Portuguesa .csv'、'Sucre.csv'、'Trujillo.csv'、'Táchira.csv'、'Vargas.csv'、'Yaracuy.csv'、'Zulia.csv']
  • 嗯,pd.read_csv(os.path.join(os.getcwd(), os.listdir()[1])) 有效吗?
  • 不,这不起作用,并产生与上述相同的 OSError:OSError: File b'C:\\PF2\\QGIS Valmiera\\Datasets\\Venezuela\\Provinces\\Points\\Anzo\xc3\xa1tegui.csv' does not exist
  • 鱼腥味!我认为这可能是一个错误,您介意将其作为问题发布到 github 上吗?

标签: python csv python-3.x encoding pandas


【解决方案1】:

好吧,伙计们,我有点迷失在依赖地狱中,但事实证明这个问题在 pandas 0.14.0 中得到了修复。安装更新版本以正确导入以重音命名的文件。

Comments at github.

感谢您的意见!

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2014-01-08
    相关资源
    最近更新 更多