Прочитать файл и удалить \n и разбить список
У меня есть задание, в котором я должен прочитать файл "words.csv":
Hemuli,Muumipappa,13,4
Abbath,Fenriz,6,6
И я должен распечатать его следующим образом:
Hemuli 13 - 4 Muumipappa
Abbath 6 - 6 Fenriz
Мой код до сих пор:
def nayta_tulokset(words):
with open(words) as tulos:
tulokset = tulos.read()
a = tulokset.split(",")
print(a)
Это дает мне следующее list
:
['Hemuli', 'Muumipappa', '13', '4\nAbbath', 'Fenriz', '6', '6']
Что именно то, что я хочу, но как мне продолжить, чтобы сократить это \ n? "4" и "Abbath" должны быть в одном из своих собственных индексов. Кажется, не могу понять... После этого я мог использовать индексы и распечатывать с format().
4 ответа
Ты можешь использовать splitlines()
во время чтения
def nayta_tulokset(words):
with open(words) as tulos:
return tulos.read().splitlines()
# output: ['Hemuli,Muumipappa,13,4', 'Abbath,Fenriz,6,6']
Затем разбить строку .split(',')
for i in nayta_tulokset(words):
_f = i.split(",")
print("{} {} - {} {}".format(_f[0], _f[-2], _f[-1], _f[1]))
# Hemuli 13 - 4 Muumipappa
# Abbath 6 - 6 Fenriz
Решение, которое использует понимание списка и формат строки, как указано выше, может быть:
def nayta_tulokset(words):
with open(words, 'r') as f:
return list(map(lambda x:"{} {} - {} {}".format(x[0],x[2],x[3],x[1]), map(lambda x:x.split(','),f.read().split())))
так
nayta_tulokset('words.csv')
['Hemuli 13 - 4 Muumipappa', 'Abbath 6 - 6 Fenriz']
Чтобы получить желаемый результат, вам нужно прочитать каждую строку отдельно и распечатать ее как положено.
Создание, на вашем коде, вот как вы можете продолжить
def nayta_tulokset(words):
with open(words) as tulos:
for line in tulos.read().split('\n'):
a = line.split(",")
print("{} {} - {} {}".format(a[0], a[2], a[3], a[1]))
Вместо того, чтобы использовать tulos.read().split('\n')
, ты можешь использовать tulos.readlines()
, который позаботится о чтении вашего файла в список строк. Поэтому после рефакторинга код будет выглядеть так:
def nayta_tulokset(words):
with open(words) as tulos:
for line in tulos.readlines():
a = line.split(",")
print("{} {} - {} {}".format(a[0], a[2], a[3], a[1]))
Более подробная информация: я думаю, единственная неоднозначная часть кода заключается в следующем:
"{} {} - {} {}".format(a[0], a[2], a[3], a[1])
Что эквивалентно следующей конкатенации строк:
a[0] +" " + a[2] +" - " + a[3] + " " +a[1]
Возможно, вы захотите использовать регулярные выражения. Вот так:
import re
def nayta_tulokset(words):
with open(words) as tulos:
tulokset = tulos.read()
#a = re.findall(r"[\w']+", tulokset)
a = re.split(",\n", tulokset)
Это должно дать вам:
['Hemuli', 'Muumipappa', '13', '4', 'Abbath', 'Fenriz', '6', '6']