Как прочитать конкретную строку, а затем добавить ее в словарь Python - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть такой файл, и я хочу прочитать его от строки by walk до строки car, а затем добавить его в словарь, где ключом будет время 7.00 - 8.00, а значением будет число 150.

Например

by_walk = {"7.00 - 8.00":150, "8.00 - 9.00":175 and et cetera}
car = {"7.00 - 8.00":150, "8.00 - 9.00":175 and et cetera}
bus = {"7.00 - 8.00":150, "8.00 - 9.00":175 and et cetera}

Как я могу это сделать?

By walk
7.00 - 8.00 - 150
8.00 - 9.00 - 175
9.00 - 10.00 - 120
10.00 - 11.00 - 30
11.00 - 12.00 - 10
12.00 - 13.00 - 10
13.00 - 14.00 - 10
14.00 - 15.00 - 10
15.00 - 16.00 - 10
16.00 - 17.00 - 175
17.00 - 18.00 - 150
18.00 - 19.00 - 50
Car
7.00 - 8.00 - 150
8.00 - 9.00 - 175
9.00 - 10.00 - 120
10.00 - 11.00 - 30
11.00 - 12.00 - 10
12.00 - 13.00 - 10
13.00 - 14.00 - 10
14.00 - 15.00 - 10
15.00 - 16.00 - 10
16.00 - 17.00 - 175
17.00 - 18.00 - 150
18.00 - 19.00 - 50
Bus
7.00 - 8.00 - 150
8.00 - 9.00 - 175
9.00 - 10.00 - 120
10.00 - 11.00 - 30
11.00 - 12.00 - 10
12.00 - 13.00 - 10
13.00 - 14.00 - 10
14.00 - 15.00 - 10
15.00 - 16.00 - 10
16.00 - 17.00 - 175
17.00 - 18.00 - 150
18.00 - 19.00 - 50

Спасибо за все ответы, у меня возникла проблема, я не знаю, как прочитать строку изот машины до автобуса, вот мой код:

 by_walk = {}
 car = {}
 bus = {}
 for line in open("test.txt"):
     if line.strip() != "Car":
         if line.strip() == "By walk":
             continue
         line = line.rsplit('-', 1)
         by_walk[line[0].strip()] = int(line[1])
     elif line.strip() == "Car":
          break
for line in open("test.txt"):

Но после первого цикла я не знаю, что делать и какой код мне нужно написать.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Читайте файл построчно и смотрите, содержит ли строка -.Если это так, то вы знаете, что оттуда вы должны начать делать словарь.В противном случае вы добавляете сформированный словарь в список.Этот код делает это -

travel_list = []
time_dict = dict()
with open('tmp.txt', 'r') as f:
    for line in f:
        s = line.rsplit('-', 1)
        if '-' in line:
            time_dict[s[0]] = s[1].rstrip()
        else:
            time_dict = dict()
            travel_list.append({line.rstrip(): time_dict})

Вывод:

Out[20]: 
[{'By walk': {'7.00 - 8.00 ': ' 150',
   '8.00 - 9.00 ': ' 175',
   '9.00 - 10.00 ': ' 120',
   '10.00 - 11.00 ': ' 30',
   '11.00 - 12.00 ': ' 10',
   '12.00 - 13.00 ': ' 10',
   '13.00 - 14.00 ': ' 10',
   '14.00 - 15.00 ': ' 10',
   '15.00 - 16.00 ': ' 10',
   '16.00 - 17.00 ': ' 175',
   '17.00 - 18.00 ': ' 150',
   '18.00 - 19.00 ': ' 50'}},
 {'Car': {'7.00 - 8.00 ': ' 150',
   '8.00 - 9.00 ': ' 175',
   '9.00 - 10.00 ': ' 120',
   '10.00 - 11.00 ': ' 30',
   '11.00 - 12.00 ': ' 10',
   '12.00 - 13.00 ': ' 10',
   '13.00 - 14.00 ': ' 10',
   '14.00 - 15.00 ': ' 10',
   '15.00 - 16.00 ': ' 10',
   '16.00 - 17.00 ': ' 175',
   '17.00 - 18.00 ': ' 150',
   '18.00 - 19.00 ': ' 50'}},
 {'Bus': {'7.00 - 8.00 ': ' 150',
   '8.00 - 9.00 ': ' 175',
   '9.00 - 10.00 ': ' 120',
   '10.00 - 11.00 ': ' 30',
   '11.00 - 12.00 ': ' 10',
   '12.00 - 13.00 ': ' 10',
   '13.00 - 14.00 ': ' 10',
   '14.00 - 15.00 ': ' 10',
   '15.00 - 16.00 ': ' 10',
   '16.00 - 17.00 ': ' 175',
   '17.00 - 18.00 ': ' 150',
   '18.00 - 19.00 ': ' 50'}}]
0 голосов
/ 04 декабря 2018

IN:

import re

dict1 = dict()
readValues = iter(re.split('\n', open("file.txt", "r").read()))
next(readValues)
for v in readValues:
    rV = re.split("(([0-9- ]{1,2}.[0-9- ]{1,2}) - ([0-9- ]{1,2}.[0-9- ]{1,2})\w+)", v)
    dict1[rV[1]] = rV[4].replace("-", "").strip()

print(dict1)

OUT:

 {'7.00 - 8.00': '150', '8.00 - 9.00': '175', '9.00 - 10.00': '120', '10.00 - 11.00': '30', '11.00 - 12.00': '10', '12.00 - 13.00': '10', '13.00 - 14.00': '10', '14.00 - 15.00': '10', '15.00 - 16.00': '10', '16.00 - 17.00': '175', '17.00 - 18.00': '150', '18.00 - 19.00': '50'}
0 голосов
/ 04 декабря 2018

Попробуйте это.

Переменная q доступна только в том случае, если перед первым видом транспорта есть строки "time / count" (это, вероятно, будет ошибка в файле).Предполагается, что строка, начинающаяся с буквы, является режимом переноса, любая другая строка - это время / счет.Это можно адаптировать (например, удалить строки комментариев).

by_walk = {}
car = {}
bus = {}

tbl = {"By walk": by_walk, "Car": car, "Bus": bus}

q = False
with open("test.txt", "rt") as f:
    for s in f:
        s = s.rstrip("\r\n")
        if s[0].isalpha():
            q = True
            h = tbl[s]
        elif q:
            u, v = s.rsplit("-", 1)
            u = u.strip()
            v = int(v)
            h[u] = v

Также возможно разместить неизвестные виды транспорта, используя пустой tbl и добавляя только виды транспорта, когда они встречаются.

from collections import defaultdict
tbl = defaultdict(dict)

q = False
with open("test.txt", "rt") as f:
    for s in f:
        s = s.rstrip("\r\n")
        if s[0].isalpha():
            q = True
            h = tbl[s]
        elif q:
            u, v = s.rsplit("-", 1)
            u = u.strip()
            v = int(v)
            h[u] = v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...