2013-10-01 4 views
4

У меня возникла проблема с переходом пути на две строки в моем компиляторе python. Это просто длинный путь на экране компилятора, и мне нужно растянуть окно слишком широко. Я знаю, как разбить печать («строка») на две строки кода, которые будут скомпилированы правильно, но не открыты (путь). Когда я пишу это, я заметил, что текстовое поле не может даже удерживать все на одной строке. печать()Разбивка длинных имен путей

`raw_StringFile = open(r'C:\Users\Public\Documents\year 2013\testfiles\test   code\rawstringfiles.txt', 'a')` 
+0

Очень полезные советы по длинным именам путей здесь. Я думаю, что префикс r, используемый на нескольких линиях, очень помог. – Adreamer82

ответ

4

Вот что \ для.

>>> mystr = "long" \ 
... "str" 
>>> mystr 
'longstr' 

Или в вашем случае:

longStr = r"C:\Users\Public\Documents\year 2013\testfiles" \ 
      r"\testcode\rawstringfiles.txt" 
raw_StringFile = open(longStr, 'a') 

EDIT

Ну, вам не нужно даже в \, если вы используете скобки, то есть:

longStr = (r"C:\Users\Public\Documents\year 2013\testfiles" 
       r"\testcode\rawstringfiles.txt") 
raw_StringFile = open(longStr, 'a') 
+1

Использование \ в конце строк не PEP8ish – cmd

+0

@cmd: Gah! C! Он просачивается и отравляет все! –

2

Вы можете поместить строку в круглые скобки, например:

>>> (r'C:\Users\Public\Documents' 
... r'\year 2013\testfiles\test   code' 
... r'\rawstringfiles.txt') 
'C:\\Users\\Public\\Documents\\year 2013\\testfiles\\test   code\\rawstringfiles.txt' 

Это называется «String literal concatenation». Цитата docs:

несколько соседних строковых литералов (с разделителями пробелами), возможно, с использованием различных цитирования конвенции, будет разрешена, и их значение же, как и их конкатенация. Таким образом, «привет» «мир» эквивалентен «helloworld». Эта функция может быть использована для уменьшения числа обратной косой черты необходимо, чтобы разделить длинные строки удобно через длинные линии, или даже добавлять комментарии к части строк, например:

re.compile("[A-Za-z_]"  # letter or underscore 
      "[A-Za-z0-9_]*" # letter, digit or underscore 
) 

Также смотрите:

5

позволяет Python конкатенация строк просто поместив их рядом друг с другом:

In [67]: 'abc''def' 
Out[67]: 'abcdef' 

In [68]: r'abc'r'def' 
Out[68]: 'abcdef' 

In [69]: (r'abc' 
    ....: r'def') 
Out[69]: 'abcdef' 

Так что-то вроде этого должны работать для вас.

raw_StringFile = open(r'C:\Users\Public\Documents\year 2013\testfiles' 
         r'\testcode\rawstringfiles.txt', 'a') 

Другой вариант заключается в использовании os.path.join:

myPath = os.path.join(r'C:\Users\Public\Documents\year 2013\testfiles', 
         r'testcode\rawstringfiles.txt') 
raw_StringFile = open(myPath, 'a') 
+5

Вы не можете использовать обратную косую черту в качестве последнего символа в строковом литерале. –

1

Python имеет изящную функцию под названием Implicit line joining.

Выражения в круглых скобках, квадратных скобках или фигурных скобках можно разделить на несколько физических линий без использования обратных косых черт.Например:

month_names = ['Januari', 'Februari', 'Maart',  # These are the 
       'April', 'Mei',  'Juni',  # Dutch names 
       'Juli', 'Augustus', 'September', # for the months 
       'Oktober', 'November', 'December'] # of the year 

Так ваш вопрос -

raw_StringFile = open(r'C:\Users\Public\Documents\year 2013\testfiles' 
         r'\testcode\rawstringfiles.txt', 'a') 

EDIT - В этом примере, это на самом деле String literal concatenation.

-1

Я только что это очень проблема в Python 3.5 на Windows 7, и это сработало:

imgPath = ("D:\EclipseNEON\EclipseWorkspaces\EclipsePythonWorkspace" 
      "\PythonLessons\IntroducingPython\GUIs\OReillyTarsierLogo.png") 

Ключевым моментом является то, что по крайней мере в Windows, последний символ в заданной строки не может быть обратный слэш ("\") персонаж.

Смежные вопросы