#python #python-3.x
#python #python-3.x
Вопрос:
программирование новичка здесь.
У меня есть файл cars.text, разделенный строками, которые мне нужно преобразовать в словарь, и вот формат текстового файла (пожалуйста, обратите внимание, что между каждой записью автомобиля, между названием автомобиля и предыдущей строкой есть пустая строка):
Honda
10/11/2010
blue
strong and sturdy
breaks down occasionally
Toyota
20/15/2005
indigo
big and spacious
Maserati
10/10/2009
silver
fast and furious
expensive to maintain
accident prone
Вот что я сделал
cars={}
with open('cars.txt', 'r') as f:
for line in f.readlines():
car_name=line[0]
car_date=datetime.line[1]
car_info=line[2:]
print(line)
f.close()
но код постоянно возвращает синтаксическую ошибку
Что я пытаюсь сделать, это сделать первую строку каждого абзаца ключом, вторую строку первым значением в формате DateTime, а третью строку до следующей пустой строки вторым значением, например:
cars={'Honda':['10/11/2010','''blue
strong and sturdy
breaks down occasionally'''],'Toyota':['20/15/2005','''indigo
big and spacious'''],'Maserati':['10/10/2009','''silver
fast and furious
expensive to maintain
accident prone''']
Комментарии:
1. Вам не нужно
f.close()
, потому что вы открываете файл с помощью диспетчера контекста2. Все ли строки разделены пустой строкой? И затем у вас есть дополнительная пустая строка перед каждой новой машиной?
3. между каждым новым автомобилем есть только пустая строка 🙂
4. что-то вроде абзацев, я думаю
Ответ №1:
Вот что вам нужно. Сначала прочитайте файл и используйте splitlines()
метод, чтобы составить список всех строк. Затем превратите этот список в список списков, где каждый подсписок содержит один абзац.
with open('cars.txt') as f:
names = f.read().splitlines()
l = []
s = []
for i in names:
if i == "":
l.append(s)
s = []
else:
s.append(i)
l.append(s)
Вывод будет выглядеть следующим образом:
[['Honda', '10/11/2010', 'blue', 'strong and sturdy', 'breaks down occasionally'], ['Toyota', '20/15/2005', 'indigo', 'big and spacious'], ['Maserati', '10/10/2009', 'silver', 'fast and furious', 'expensive to maintain', 'accident prone']]
Затем вы можете просто поместить эти данные в свой cars
словарь.
cars = {}
for data in l:
car_name = data[0]
car_date = data[1]
car_info = 'n'.join(data[2:])
cars[car_name] = [car_date, car_info]
print(cars)
Комментарии:
1. ты мой герой
Ответ №2:
Вы также можете сделать это таким образом:
Сначала удалите все пустые строки
with open('filename', 'r ') as fd:
lines = fd.readlines()
fd.seek(0)
fd.writelines(line for line in lines if line.strip())
fd.truncate()
Затем выполните итерацию по строкам, по пять строк за раз
cars={}
with open('filename', 'r') as f:
lines = [line.rstrip() for line in f]
for i in range(0,len(lines)-1,5):
cars[lines[i]] = lines[i 1:i 4]
print (cars)