Как указать не полный путь для pandas.read_csv()?

Я работаю с этим руководством и использую pandas для прохождения.

Это фрагмент кода, который я набрал и получил ошибку:

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.


person MRI    schedule 10.01.2018    source источник
comment
если вы запускаете оболочку python из папки ml-100k, вы можете просто указать имя файла, а не весь путь, так как рабочий каталог будет `c:\...\ml-100k`   -  person Haleemur Ali    schedule 10.01.2018
comment
'ml-100k//u.users' - Проблема может заключаться в двух косых чертах. Попробуйте одинарную косую черту. В Windows вы можете использовать одинарную косую черту / или двойную обратную косую черту \\` as a separator. Or, if you make it a raw string, a single backslash r\`,   -  person tdelaney    schedule 10.01.2018


Ответы (2)


Я считаю полезным работать с модулем 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'])
person Prikers    schedule 10.01.2018

Существует несколько способов указать путь в pandas.read_csv() документации. :

filepath_or_buffer : str, pathlib.Path, py._path.local.LocalPath или любой объект с методом read() (например, дескриптор файла или StringIO)

Строка может быть URL-адресом. Допустимые схемы URL-адресов включают http, ftp, s3 и файл. Для URL-адресов файлов ожидается хост. Например, локальный файл может быть файлом ://localhost/path/to/table.csv.

  • #P4# #P5#
    >>> Path('setup.py')
    PosixPath('setup.py')
    
    #P6#
  • #P7# #P8#
    >>> WindowsPath('c:/Program Files/')
    WindowsPath('c:/Program Files')
    
    #P9#
  • #P10# #P11# #P12# #P13#

TextIOBase предоставляет или переопределяет эти атрибуты данных и методы в дополнение к тем из IOBase:

Также я нашел вопрос об указании пути в Windows, ответы говорят, что он может сделать несколькими способами:

  • #P16#
    'C:/mydir'
    
  • #P17#
    'C:\\mydir'
    
  • #P18#
    r'C:\mydir'
    
  • #P19#
    os.path.join(mydir, myfile)
    

TLDR: самый простой и наименее сложный способ — указать переменную пути как

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

or

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'

также вы можете указать URL, как указано выше.

person Lycopersicum    schedule 10.01.2018