如何为pandas.read_csv()指定不完整​​路径?

时间:2018-01-10 03:37:17

标签: python python-3.x pandas traceback

我正在与this tutorial合作,我正在使用熊猫。

这是我键入的代码片段并收到错误:

users = pd.read_csv('ml-100k//u.users', sep = '|', names = ['User ID', 'Age','Gender', 'Occupation','Zip Code'])

上述代码产生的错误:

Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    users = pd.read_csv('ml-100k//u.users', sep = '|', names = ['User ID', 'Age','Gender', 'Occupation','Zip Code'])
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 709, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 449, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 818, in __init__
    self._make_engine(self.engine)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 1049, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 1695, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas\_libs\parsers.pyx", line 402, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas\_libs\parsers.pyx", line 718, in pandas._libs.parsers.TextReader._setup_parser_source
FileNotFoundError: File b'ml-100k//u.users' does not exist

我想通过写一下如何使它发挥作用:

users = pd.read_csv(r'C:\\Users\\User\\Documents\\Python3\\ml-100k\\ml-100k\\u.user', sep = '|', names = ['User ID', 'Age','Gender', 'Occupation','Zip Code'])

如果没有在完整文件路径中写入,是否有更简单的方法?我使用的是Windows 64 Pro。

2 个答案:

答案 0 :(得分:0)

有几种方法可以在pandas.read_csv() documentation中指定路径:

  

filepath_or_buffer strpathlib.Pathpy._path.local.LocalPath或任何带有read()方法的对象(例如文件句柄或StringIO

     

字符串可以是URL。有效的URL方案包括http,ftp,s3和file。对于文件URL,需要主机。例如,本地文件可以是文件://localhost/path/to/table.csv

  •   

    class pathlib.Path(*pathsegments)

         

    PurePath的子类,此类表示系统路径风格的具体路径(实例化它会创建PosixPathWindowsPath):

    >>> Path('setup.py')
    PosixPath('setup.py')
    
         

    pathsegments 的指定方式与PurePath类似。

  •   

    class pathlib.WindowsPath(*pathsegments)

         

    PathPureWindowsPath的子类,此类表示具体的Windows文件系统路径:

    >>> WindowsPath('c:/Program Files/')
    WindowsPath('c:/Program Files')
    
         

    pathsegments 的指定方式与PurePath类似。

  •   

    class io.TextIOBase

         

    文本流的基类。此类为流I / O提供基于字符和行的接口。没有readinto()方法,因为Python的字符串是不可变的。它继承了IOBase。没有公共构造函数。   TextIOBase除了IOBase之外,还提供或覆盖了这些数据属性和方法:

         

    <强> read(size)

         

    从流中读取并返回最多 size 个字符str。如果 size 为负数或None,则读取直到EOF。

TextIOBase除了提供来自IOBase的数据属性和方法外,还提供或覆盖这些数据属性和方法:

此外,我发现question about path specifying in Windows,答案说,它可以通过多种方式完成:

  •   

    你可以随时使用:

    'C:/mydir'
    
  •   

    这适用于linux和windows。其他可能性是

    'C:\\mydir'
    
  •   

    如果您对某些名称有疑问,也可以尝试原始字符串:

    r'C:\mydir'
    
  •   

    但最佳做法是使用os.path模块函数   始终为您的操作系统选择正确的配置:

    os.path.join(mydir, myfile)
    

TLDR :最简单,最简单的方法是将路径变量指定为

CSV_FILE = r'C:\Users\User\Documents\Python3\ml-100k\ml-100k\u.user'

CSV_FILE = 'C:\\Users\\User\\Documents\\Python3\\ml-100k\\ml-100k\\u.user'

更好,但仍然很简单的方法

CSV_FILE = os.path.join('C:', 'Users', 'User', 'Documents', 'Python3', 'ml-100k', 'ml-100k', 'u.user')

您还可以指定相对于工作目录的路径(例如,如果您的脚本位于C:\Users\User\Documents\Python3\ml-100k\ml-100k,则只需指定文件名:

CSV_FILE = 'u.user'

您也可以指定网址,如上面提到的那样。

答案 1 :(得分:0)

我发现使用pathlib模块很有用。我在我的脚本(或专用文件)之上创建Path个对象,如下所示:

from pathlib import Path
path_1 = Path(r'C:\Users\User\Documents\Python3\ml-100k\ml-100k') # absolute path
path_2 = Path.cwd() # current working directory

然后,这对其余脚本很有帮助。您可以像这样使用这些对象:

user = pd.read_csv(path_2.joinpath('u.users'), sep = '|', names = ['User ID', 'Age','Gender', 'Occupation','Zip Code'])