Finn_py
Finn_py

Reputation: 243

Python: Too long raw string, multiple lines

I am using python on windows and the path of my project folder is way too long. For example:

pathProject = r'C:\Users\Account\OneDrive\Documents\Projects\2016\Shared\Project-1\Administrative\Phase-1\Final'

os.chdir(pathProject)

How can I break this very long strong into multiple lines in the most elegant way? I know how to do it if the string is not a raw string. However, if I try something like this, I get an error:

pathProject = r'''C:\Users\Account\OneDrive\
                Documents\Projects\2016\Shared\
                Project-1\Administrative\Phase-1\
                Final'''

What is the most elegant way to break this raw string into multiple lines?

Upvotes: 19

Views: 11261

Answers (4)

Brendan Abel
Brendan Abel

Reputation: 37509

You can use parenthesis to trigger automatic line continuation. The strings will be automatically concatenated.

pathProject = (
    r"C:\Users\Account\OneDrive"
    r"\Documents\Projects\2016\Shared"
    r"\Project-1\Administrative\Phase-1\Final"
)

Upvotes: 34

Saqib Mubarak
Saqib Mubarak

Reputation: 51

In Python 3 we can use simple \ to extend any type of string wether f-strings or r-strings.
Here we put \ after every line which we want to continue.

pathProject = r'C:\Users\Account\OneDrive' \
              r'\Documents\Projects\2016\Shared' \
              r'\Project-1\Administrative\Phase-1\Final'

\ is used to continue any statement in python. for example:

if some_condition_1 and some_condition_2 and some_condition_3 and some_condition_4:
    pass

can be written as

if some_condition_1 and some_condition_2 \
   and some_condition_3 and some_condition_4:
    pass

Upvotes: 0

Yongwei Wu
Yongwei Wu

Reputation: 5582

The problem is that the ending \ is interpreted as continuation (to eliminate the LF character; Joooeey’s answer was wrong on this) and the spaces at the beginning of other lines are also included. As a single raw string, this would work:

pathProject = r'''C:\Users\Account\OneDrive\
\Documents\Projects\2016\Shared\
\Project-1\Administrative\Phase-1\
\Final'''

I think I would prefer Brendan’s way, but you probably want to know how raw strings work (or not) for your case.

Upvotes: 0

Joooeey
Joooeey

Reputation: 3866

You almost got it! The issue is that raw strings cannot end with a backslash. Hence, this works:

pathProject = r'''C:\Users\Account\OneDrive
\Documents\Projects\2016\Shared
\Project-1\Administrative\Phase-1
\Final'''

Note that if you put spaces into the triple-quoted string to indent it, like in your example, there will be spaces in your string, which you don't want. If you like indents, you can use automatic line continuation with parentheses as suggested in Brendan's answer. Again, make sure that the lines don't end with a backslash.

Upvotes: 5

Related Questions