Literały w Pythonie vs ścieżka do pliku w Windows

Pisząc skrypty operujące na plikach, natykamy się na pewien uciążliwy, problem z linkami odnoszącymi się do plików. Najlepiej odda to prościutki skrypt, którego zadaniem jest odczytać listę imion zapisaną w pliku dostępny dalej. W skrypcie musimy podać ścieżkę np. bezwzględną i tu zaczynają się schody.

Bo najprościej jest otworzyć właściwości pliku i skopiować z nich ścieżkę do pliku, a następnie wkleić ją w skrypcie.

C:\Users\user\imiona.txt

Niestety dla tak wklejonej ścieżki dostaniemy zwrotnie komunikat o błędzie. Dlaczego tak się dzieje, skoro ścieżka prawidłowa?

Dla tego, że znak backslash „\” służy do stworzenia tzw. Literałów, czyli prościej do zmiany znaczenia znaków.

Błąd jaki zostanie zwrócony:

Przykładowo takie połączenie ukośnika + n „\n” przenosi do nowej linii. Interpreter kodu, zatem nie odczytuje linka jako całości, tylko powiedzmy jako „znak specjalny” zawarty w stringu. Oczywiście to nie jedyny literał jaki można stworzyć przy użyciu ukośnika. Więcej w temacie można poczytać w dokumentacji Pythona tutaj…

Jak sobie z tym poradzić:

Sposób pierwszy utworzyć literał backslash poprzez dodanie kolejnego backslash’a  w każdym miejscu występowania backslash’a w linku, czyli tak „\\”. Wtedy powstanie nam taki lik i program zadziała:

C:\\Users\\user\\imiona.txt

Ten sposób zadziała, ale jest nieco uciążliwy, szczególnie przy dłuższych linkach.

Innym prostszym sposobem jest użycie prefixa „r” przed stringiem, czyli nasz link będzie wyglądał w następujący sposób:

r”C:\Users\user\imiona.txt”

Dzięki użyciu modyfikatora stringa „r”, program odczyta link dosłownie, czyli, że to jest link, a nie ciąg znakowy z zawartymi znakami ucieczki „\…..”.

Ma to w angielskim swoją nazwę jakby ktoś chciał więcej na ten temat poczytać, czyli „raw string” co można rozumieć jako „nieprzetworzony ciąg znaków”.

Co istotne: String nie może kończyć się nieparzystą liczbą odwrotnych ukośników „backslash”, tzn. r’nieprawidlowy\ciąg_znakow\przyklad\’, nie jest poprawnym ciągiem.

Poniżej przykład skryptu wykorzystującego różne wersje liku. Żeby skrypt zadziałał, trzeba utworzyć plik: „imona.txt”, zapisać go gdzieś na dysku komputera i wstawić prawidłową ścieżkę do pliku.

Mam nadzieję, że trochę ułatwiłem zabawę ze ścieżkami w Pythonie 😊