Преобразовать обычную строку Python в необработанную строку

У меня есть строка s, ее содержимое является переменным. Я хотел бы сделать это сырой строкой. Как мне это сделать?

Что-то похожее на метод r''.

Ответы

Ответ 1

Необработанные строки не являются строкой другого типа. Это другой способ описания строки в исходном коде. После создания строки это то, что есть.

Ответ 2

Я считаю, что вы ищете функцию str.encode( "string-escape" ). Например, если у вас есть переменная, которую вы хотите "сырой строки":

a = '\x89'
a.encode('unicode_escape')
'\\x89'

Примечание. Используйте string-escape для python 2.x и более старых версий

Я искал аналогичное решение и нашел решение через: кастинг исходных строк python

Ответ 3

Необработанные строки применяются только к строковым литералам. они существуют, так что вы можете более удобно выражать строки, которые будут изменены обработкой escape-последовательности. Это особенно полезно при написании регулярных выражений или других форм кода в строковых литералах. если вы хотите строку unicode без обработки escape-кода, просто прикрепите ее к ur, например ur'somestring'.

Ответ 4

Вы можете использовать метод format() для преобразования строки в необработанную строку.

В вашем случае это будет примерно так:

raw_s = r'{}'.format(s)

Ответ 5

Для Python 3 способ сделать это, который не добавляет двойной обратной косой черты и просто сохраняет \n, \t и т.д., Заключается в следующем:

a = 'hello\nbobby\nsally\n'
a.encode('unicode-escape').decode().replace('\\\\', '\\')
print(a)

Что дает значение, которое можно записать как CSV:

hello\nbobby\nsally\n

Похоже, что нет решения для других специальных символов, которые могут получить\перед ними. Это облом. Решить это было бы сложно.

Например, чтобы сериализовать pandas.Series, содержащий список строк со специальными символами, в текстовый файл в формате , BERT ожидает CR между каждым предложением и пустой строкой между каждым документом:

with open('sentences.csv', 'w') as f:

    current_idx = 0
    for idx, doc in sentences.items():
        # Insert a newline to separate documents
        if idx != current_idx:
            f.write('\n')
        # Write each sentence exactly as it appared to one line each
        for sentence in doc:
            f.write(sentence.encode('unicode-escape').decode().replace('\\\\', '\\') + '\n')

Это выводит (для строк документации Github CodeSearchNet для всех языков, разбитых на предложения):

Makes sure the fast-path emits in order.
@param value the value to emit or queue up\[email protected] delayError if true, errors are delayed until the source has terminated\[email protected] disposable the resource to dispose if the drain terminates

Mirrors the one ObservableSource in an Iterable of several ObservableSources that first either emits an item or sends\na termination notification.
Scheduler:\n{@code amb} does not operate by default on a particular {@link Scheduler}.
@param  the common element type\[email protected] sources\nan Iterable of ObservableSource sources competing to react first.
A subscription to each source will\noccur in the same order as in the Iterable.
@return an Observable that emits the same sequence as whichever of the source ObservableSources first\nemitted an item or sent a termination notification\[email protected] ReactiveX operators documentation: Amb


...

Ответ 6

Поскольку строки в Python неизменны, вы не можете "сделать это" чем-то другим. Однако вы можете создать новую необработанную строку из s, например:

raw_s = r'{}'.format(s)