Python Преобразование строки в список без учета специальных символов - PullRequest
1 голос
/ 01 апреля 2020

У меня есть строка в виде: -

'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'

Я хочу преобразовать ее в список в виде: -

['Current Weather','12:36 AM','22°','C','RealFeel®','20°','Mostly clear']

Есть ли какой-либо модуль или функция python с что я могу сделать так?

Ответы [ 4 ]

5 голосов
/ 01 апреля 2020

Вы можете использовать re.split:

import re

s = 'Current Weather\n\t\n.....t\tMostly clear'
re.split(r'[\n\t]+', s)

Выход:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
2 голосов
/ 01 апреля 2020

Почему все используют re? Эта библиотека очень медленная. Вы можете просто использовать str.split, если вы используете ее с аргументами, вам придется делать str.isspace вручную, но это все еще довольно быстро, вот код:

>>> [i.strip() for i in s.split('\n\t') if not i.isspace()]
['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']

Тесты:

>>> timeit.timeit(r"re.split(r'[\n\t]+', s)",r"""
import re
s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
2.8587728
timeit.timeit(r"[i.strip() for i in s.split('\n\t') if not i.isspace()]",r"""import re

s = 'Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
""")
1.8853902
0 голосов
/ 01 апреля 2020

Вы можете использовать Python регулярное выражение. Вот пример:

import re
def sentance_to_list(sentence):
ls=re.split(r'["\t|\n"]\s*', sentence)   # split \t or \n
return ls

strr='Current Weather\n\t\n\n\t\t12:36 AM\n\t\n\n\n\n\t\t\t22°\n\t\t\n\n\t\t\t\tC\n\t\t\t\n\n\n\t\tRealFeel®\n\t\t20°\n\t\n\n\t\tMostly clear'
newstrr=sentance_to_list(strr)
print(newstrr) 

output:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']

Вы можете прочитать больше о re https://docs.python.org/3/library/re.html

0 голосов
/ 01 апреля 2020

Без регулярного выражения:

[x.strip() for x in st.splitlines() if x.strip()!= '']

вывод:

['Current Weather', '12:36 AM', '22°', 'C', 'RealFeel®', '20°', 'Mostly clear']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...