Навіщо використовувати os.path.join над конкатенацією рядків?


85

Я думаю, що я не в змозі побачити загальну картину; але в основному я не уявляю, чому ви використовуєте os.path.joinзамість звичайної конкатенації рядків?

Я в основному використовував VBScript, тому я не розумію суть цієї функції.


Відповіді:


85

Портативний

Напишіть маніпуляції з файловим шляхом один раз, і це працює на багатьох різних платформах безкоштовно. Розмежувальний символ абстрагується, що полегшує вашу роботу.

Розумний

Вам більше не потрібно турбуватися, якщо цей шлях до каталогу має косу риску чи ні . os.path.joinдодасть його, якщо буде потрібно.

Ясно

Використання os.path.joinробить очевидним для інших людей, які читають ваш код, що ви працюєте з файловими шляхами. Люди можуть швидко просканувати код і суттєво виявити, що це шлях до файлу. Якщо ви вирішите побудувати його самостійно, ви, швидше за все, відвернете читача від виявлення реальних проблем із вашим кодом: "Хм, кілька рядків, заміни. Це шлях до файлу чи що? Гах! Чому він не використовував os.path.join?" :)


3
Дякую. Розумні та чіткі частини - це саме те міркування, яке я шукав, коли задавав собі те саме питання: портативну частину легко досягти, об’єднавшись знаком "/" замість "\" лише для вікон, тому це начебто спірне питання.
Лео Гермонд

3
пункт 3 має переваги, але 1 і 2 спірні. / працює на Windows. Яку ОС ви коли-небудь використовуєте, а не підтримує? А подвійні кінцеві скісні риски нормалізуються для вас за допомогою ОС / FS. Я не кажу, що не використовуйте os.path.join, але якщо ви робите, робіть це з правильних причин. Навколо os.path.join є багато вантажів. "Дурна послідовність - це хобгоблін маленьких розумів", як вони кажуть.
hraban

5

Працюватиме в Windows з '\' та Unix (включаючи Mac OS X) з '/'.

для posixpath ось прямий код

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

не мають вікон, але те саме повинно бути там із "\"


5
Як не дивно, але використання /робіт у Windows, з CPython ...
Ерік Лебіго

1
Це. Чому б вам намагатися самостійно обробляти роздільники шляхів тощо, коли є функція, призначена для вас?
Блер

1
Я читаю коментарі, і це об'єднує шляхи разом, я просто не можу зрозуміти, чому я коли-небудь це використовую, вибачення, як я вже сказав, явно не бачу загальної картини.
user1905410

@ user1905410 Це робить більше, ніж це стосується Тонкої документації.

@ user1905410 Це робить більше, ніж це, оскільки охоплює точна документація.

0

Це не залежить від ОС. Якщо ви жорстко кодуєте свої шляхи як C: \ Незалежно від того, вони будуть працювати лише в Windows. Якщо ви жорстко кодуєте їх зі стандартом Unix "/", вони працюватимуть лише на Unix. os.path.join виявляє операційну систему, в якій вона працює, та приєднує шляхи, використовуючи правильний символ.


7
If you hardcode them with the Unix standard "/" they will only work on Unix.Це неправильно. "/" чудово працює у Windows І linux / unix / bsd / darwin.
Лео Гермонд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.