Ответ 1
Необработанные строки не являются строкой другого типа. Это другой способ описания строки в исходном коде. После создания строки это то, что есть.
У меня есть строка s
, ее содержимое является переменным. Я хотел бы сделать это сырой строкой. Как мне это сделать?
Что-то похожее на метод r''
.
Необработанные строки не являются строкой другого типа. Это другой способ описания строки в исходном коде. После создания строки это то, что есть.
Я считаю, что вы ищете функцию str.encode( "string-escape" ). Например, если у вас есть переменная, которую вы хотите "сырой строки":
a = '\x89'
a.encode('unicode_escape')
'\\x89'
Примечание. Используйте string-escape
для python 2.x и более старых версий
Я искал аналогичное решение и нашел решение через: кастинг исходных строк python
Необработанные строки применяются только к строковым литералам. они существуют, так что вы можете более удобно выражать строки, которые будут изменены обработкой escape-последовательности. Это особенно полезно при написании регулярных выражений или других форм кода в строковых литералах. если вы хотите строку unicode без обработки escape-кода, просто прикрепите ее к ur
, например ur'somestring'
.
Вы можете использовать метод format()
для преобразования строки в необработанную строку.
В вашем случае это будет примерно так:
raw_s = r'{}'.format(s)
Для 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
...
Поскольку строки в Python неизменны, вы не можете "сделать это" чем-то другим. Однако вы можете создать новую необработанную строку из s
, например:
raw_s = r'{}'.format(s)