@wunderer

Как мне модифицировать исходный текст?

Есть файл с таким текстом:
Входной текст

osu.ppy.sh/s/125380 Duca - COLD BUTTERFLY [Insane] 5,34★(363063)
osu.ppy.sh/s/706150 REOL - Endless Line [NiNo's Extra] 5,32★(1496389) [Infinite] 5,83★(1493345)
osu.ppy.sh/s/29044 Atoguru - Itoshi Kimi wo Mitsuke ni [Insane] 4,88★(96523)
osu.ppy.sh/s/21924 Amane - Midsummer Festival [Lunatteke] 4,69★(75822)
osu.ppy.sh/s/539203 Krewella X DISKORD - Beggars (Consouls Remix) [vanucik's Another] 5,24★(1184167)
osu.ppy.sh/s/137973 MYTK - Yggdrasil [dksslqj's EXHAUST] 5,05★(346653)
osu.ppy.sh/s/829950 ALiCE'S EMOTiON - Lorelei [Vintage] 5,16★(1738984)
osu.ppy.sh/s/351828 TOTTO - Wadatsumi [Pho's Insane] 5,09★(775364)
osu.ppy.sh/s/91791 senya - Magica [SatelliteFrostMix] 4,62★(248474)
osu.ppy.sh/s/523558 Alfakyun. x Camellia - calling [Haruto's Adagietto] 5,16★(1160989)
osu.ppy.sh/s/1 bbn - Identic Conflict [Another] 5,01★(161159) [Guard Up!] 5,5★(249435) [MUNOSU] 5,84★(2119486) [Regou's Hyper] 4,22★(1536573) [Impure's Insane] 5★(1892654) [Insane] 4,68★(1990369) [sahuang's Insane] 5,06★(1077151) [Extra] 5,7★(848781) [Theaceae's Another] 5,33★(1626314) [N/A's INFINITE] 5,17★(1056685) [Fuccho's Another] 5,31★(1090074) [jounzan's another] 5,19★(1935975) [Insane] 5,04★(1653505) [Lasse's Insane] 4,62★(1564628) [Insane] 5,53★(1360649) [Lunatic] 5,33★(1393407) [Delis' Insane] 4,93★(1419974) [Continue? < Yes / No >] 5,62★(1501342) [Velocity of Rage [o!ru edit]] 4,84★(0) [Another] 4,7★(2210623) [Senseabel's Insane] 5,04★(2101360) [Expert] 5,85★(693542)

Надо модифицировать его так, чтобы на выходе я получил строки такого вида:
"client: osu.ppy.sh/s/125380 | direct: osu://b/363063",
До этого я использовал такой вот код:
import codecs

fileObj = codecs.open( "C:\\Users\\wunderer\\Desktop\\python\\maps.txt", "r", "utf_8_sig" )
for line in fileObj:
	site_line = line.split(' ')[0]
	direct_line = site_line.split('http://osu.ppy.sh/s/', 1)[1].lstrip()
	print('\t'+'"'+'site: 'site_line + ' | '+'direct: ' +'<'+ 'osu://b/'+ direct_line+'>'+'"'+',')

fileObj.close()


Не знаю как его можно переписать под данную задачу.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
import re

with open('osu.txt', 'r', encoding='utf-8') as f:
    for line in f.readlines():  
        client = re.match(r'(.+?)\s', line).group(1)
        song_id = re.search(r'\((\d+)\)', line).group(1)

        print('client: {} | direct: osu://b/{}'.format(client, song_id))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
import re

with open('osu.txt', 'rt', encoding='utf-8') as f:
    for client, *_, song_id in map(re.compile('\d+').findall, f.readlines()):
        print(f'client: osu.ppy.sh/s/{client} | direct: osu://b/{song_id}')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы