Шлях Windows у Python


152

Який найкращий спосіб представити, наприклад, каталог Windows "C:\meshes\as"? Я намагаюся змінити сценарій, але він ніколи не спрацьовує, тому що я, здається, не можу правильно довідати каталог, я вважаю, що він '\'виступає як символ втечі?

Відповіді:


220

Ви завжди можете використовувати:

'C:/mydir'

це працює як у Linux та Windows. Інша можливість є

'C:\\mydir'

якщо у вас є проблеми з деякими іменами, ви можете також спробувати необроблені рядкові букви:

r'C:\mydir'

однак найкраща практика - використовувати функції os.pathмодуля, які завжди вибирають правильну конфігурацію для вашої ОС:

os.path.join(mydir, myfile)

З python 3.4 ви також можете використовувати модуль pathlib . Це рівнозначно вищезгаданому:

pathlib.Path(mydir, myfile)

або

pathlib.Path(mydir) / myfile

2
@Gareth, я дуже ледачий і часто опиняюсь, що використовую '/'. Однак у перспективі використання os.path зручніше. Це також дозволяє використовувати mydir та myfile як змінні, які ви можете легко змінити.
Жоакін

13
Єдине, на що слід бути обережним із сирих рядків, - це те, що вони не можуть закінчитися \
Дуглас Лідер

Ви можете використовувати os.path.join (), щоб усунути необхідність закінчення шляхів з \.
Буде Едігер

1
Мені подобається синтаксис r (сирий рядок). Корисно, якщо ви копіюєте довгий шлях, куди вам зазвичай доведеться замінити всі косої
накидки на

необроблена рядок може закінчуватися символом \\, тому ми можемо об'єднати файл у шлях: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + файл, 'r', encoding = 'utf-8') як f:
Макс Клейнер

20

Використовуйте os.pathмодуль.

os.path.join( "C:", "meshes", "as" )

Або використовувати сирі рядки

r"C:\meshes\as"

Я також рекомендую не містити пробілів у шляху та іменах файлів. І ви могли використовувати подвійні нахили в своїх струнах.

"C:\\meshes\\as.jpg"

11
os.path.join може не вести себе так, як ви очікуєте, коли компонент є буквою диска, оскільки відносні шляхи дозволені навіть тоді. (Результат першого рядка - "C: meshes \\ as" у Windows.)
dash-tom-bang

@ коментар dash-tom-bang дуже важливий. Чи правильно це зробити, щоб поставити "C:\"як перший запис? Це заплутує чисту чистоту використання join?
Джек О'Коннор

1
@ JackO'Connor ось що я роблю. Ви, звичайно, не хочете ставити "C:\"середину імені файлу. Крім того, ви можете використовувати os.path.normpathдо або після з'єднання, щоб переконатися, що шлях добре друкується.
Агостіно

але це також не працює. Що працюєos.path.join( "C:\\", "meshes", "as" )
Жан-Франсуа Фабре

17

Так, \у рядках Python літерали позначають початок послідовності відходу. На вашому шляху у вас є дійсна послідовність втечі з двох символів \a, яка згортається на один символ, який є ASCII Bell :

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

Інші поширені послідовності відходу включають \t(вкладка), \n(канал рядка), \r(повернення каретки):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

Як бачимо, у всіх цих прикладах зворотна косої риски та наступний символ у літералі були згруповані разом, щоб утворити єдиний символ у заключному рядку. Повний список послідовностей втечі Python тут .

Існує безліч способів вирішити це:

  1. Python не буде обробляти послідовності втечі в рядкових літералах з префіксом rабоR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Python в Windows також повинен працювати з косою косою рискою.

  3. Ви можете використовувати os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... або новіший pathlibмодуль

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')

-1

Використовуйте PowerShell

У Windows ви можете використовувати /на своєму шляху так само, як Linux або macOS у всіх місцях , якщо ви використовуєте PowerShell як інтерфейс командного рядка. Він поставляється заздалегідь встановлений у Windows, і він підтримує багато команд Linux, таких як lsкоманда.

Якщо ви використовуєте командний рядок Windows (той, який з’являється під час введення cmdв меню «Пуск Windows»), вам потрібно вказати шляхи, що знаходяться \просто всередині нього. Ви можете використовувати /шляхи в усіх інших місцях (редактор коду, інтерактивний режим Python тощо).


-1

Якщо ви хочете вставити шлях до Windows з іншого джерела (скажімо, File Explorer) - це можна зробити за допомогою input()виклику в консолі python:

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

Потім просто скопіюйте результат

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.