代码之家  ›  专栏  ›  技术社区  ›  Porcelain Mouse

Windows操作系统无法打开在linux上工作的文件名

  •  2
  • Porcelain Mouse  · 技术社区  · 7 年前

    我正在Linux上开发一个小型Python应用程序,其中代码在系统Python3和Anaconda Python3解释器上都运行良好。但是,当我在Anaconda/Windows上运行它时,我会得到以下回溯:

    Traceback (most recent call last):
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py"
    , line 1699, in __call__
        return self.func(*args)
      File "./dataView.py", line 312, in doChop
        self.DA.chop()
      File "C:\Users\<redacted>\DataAnalyser.py", line 212, in chop
        self.df.to_hdf( filename, mode='w', key=hdfKey, data_columns = view )
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas
    \core\generic.py", line 1471, in to_hdf
        return pytables.to_hdf(path_or_buf, key, self, **kwargs)
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas
    \io\pytables.py", line 280, in to_hdf
        complib=complib) as store:
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas
    \io\pytables.py", line 467, in __init__
        self.open(mode=mode, **kwargs)
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas
    \io\pytables.py", line 580, in open
        self._handle = tables.open_file(self._path, self._mode, **kwargs)
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\tables
    \file.py", line 320, in open_file
        return File(filename, mode, title, root_uep, filters, **kwargs)
      File "C:\Users\<redacted>\AppData\Local\Continuum\anaconda3\lib\site-packages\tables
    \file.py", line 784, in __init__
        self._g_new(filename, mode, **params)
      File "tables\hdf5extension.pyx", line 487, in tables.hdf5extension.File._g_new
    
    tables.exceptions.HDF5ExtError: HDF5 error back trace
    
      File "C:\Users\builder\mc3\conda-bld\hdf5_1506030377716\work\src\H5F.c", line
    491, in H5Fcreate
        unable to create file
      File "C:\Users\builder\mc3\conda-bld\hdf5_1506030377716\work\src\H5Fint.c", li
    ne 1247, in H5F_open
        unable to open file: time = Wed Feb 28 18:26:31 2018
    , name = 'chop_x:0:49.hdf5', tent_flags = 13
      File "C:\Users\builder\mc3\conda-bld\hdf5_1506030377716\work\src\H5FD.c", line
     809, in H5FD_open
        open failed
      File "C:\Users\builder\mc3\conda-bld\hdf5_1506030377716\work\src\H5FDsec2.c",
    line 346, in H5FD_sec2_open
        unable to open file: name = 'chop_x:0:49.hdf5', errno = 22, error message =
    'Invalid argument', flags = 13, o_flags = 302
    
    End of HDF5 error back trace
    
    Unable to open/create file 'chop_x:0:49.hdf5'
    

    我尝试在Anaconda/Win ipython3中手动写入一个名称完全相同的文件,这也很好。我还尝试将名称更改为一个简单的字符串,这很有效,表明我传递的文件名值在str.format()构造时确实有问题。另一方面,当我 df.to_hdf('chop_x:0:49.hdf5', 'w', 'chop') 它工作得很好。我怎样才能看到我传递的参数有什么问题?你认为这是另一个参数的问题吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Patrick Artner    7 年前

    不同的操作系统对路径和文件名中允许的字符有不同的限制。

    尝试使用 : 在windows资源管理器中,您可以看到它不工作的原因。

    Naming Files, Paths, and Namespaces

    禁止使用:

    < (less than)
    > (greater than) 
    : (colon)
    " (double quote)
    / (forward slash)
    \ (backslash)
    | (vertical bar or pipe)
    ? (question mark)
    * (asterisk)
    

    整数值零,有时称为ASCII NUL字符。 整数表示形式在1到1范围内的字符 到31,但这些字符所在的备用数据流除外 是允许的。

    (摘自以上链接,还有更多内容,请阅读。)