2016-12-29 1 views
1

У меня есть ряд строк, из которых я пытаюсь удалить charactars с помощью replace. Однако этот доцент, похоже, проснулся. Чтобы дать упрощенный пример, этот код:Удалить символы из строки с заменой неработающей

row = "b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'" 
row = row.replace("b'", "").replace("'", "").replace('b"', '').replace('"', '') 
print(row.encode('ascii', errors='ignore')) 

еще это b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38' Выходы я Тогда как нравится выводить James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38. Как я могу это сделать?

Редактировать: обновленный код с лучшим примером.

+0

вы имели в виду, что вы хотели бы 'b'xyz'' как выход? Вы можете вводить в заблуждение строки с байтами. –

ответ

1

Вы, кажется, ошибаетесь одинарные кавычки для двойных кавычек. Простой заменить'b:

>>> row = "xyz'b" 
>>> row.replace("'b", "") 
'xyz' 

В качестве альтернативы str.replace, вы можете просто ломтик строка для удаления нежелательных ведущих и завершающих символов:

>>> row[2:-1] 
'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38' 
1

В своем первом .replace, изменить b' до 'b. Поэтому ваш код должен быть:

>>> row = "xyz'b" 
>>> row = row.replace("'b", "").replace("'", "").replace('b"', '').replace('"', '') 
#     ^changed here 
>>> print(row.encode('ascii', errors='ignore')) 
xyz 

Я предполагаю, что остальные условия у вас есть являются частью другой задачи/совпадет, что вы не упомянули здесь.

Если все, что вы хотите, чтобы принять строку перед первым ', то вы можете просто сделать:

row.split("'")[0] 
0
import ast 
row = "b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'" 

b_string = ast.literal_eval(row) 
print(b_string) 
u_string = b_string.decode('utf-8') 
print(u_string) 

выписка из расчета:

b_string:b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38' 
u_string: James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38 

Реальный вопрос заключается в том, как преобразовать строку в объект python.

Вы получаете строку, которая содержит двоичную строку, чтобы преобразовать ее в двоичный строковый объект python, вы должны использовать eval(). ast.literal_eval() - более безопасный способ сделать это.

Теперь вы получаете двоичную строку, вы можете преобразовать его в юникод строки, которые не начинаются с «Ъ» с помощью decode()