【问题标题】:How to read specific line and then add it to dictionary python如何读取特定行,然后将其添加到字典 python
【发布时间】:2018-12-04 13:47:48
【问题描述】:

我有这样的文件,我想从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"):

但是在第一次循环之后我不知道该做什么以及我需要编写什么代码。

【问题讨论】:

  • 你试过了吗?
  • 此问题缺少上下文或其他详细信息:请通过提供其他上下文来改进问题,最好包括您对问题的想法以及您为解决问题所做的任何尝试。此信息有助于其他人确定您遇到的困难,并帮助他们写出适合您经验水平的答案。您还需要准确说明问题是什么、您的预期、您得到了什么以及任何回溯。

标签: python list dictionary


【解决方案1】:

试试这个。

变量q 仅在第一种传输模式之前存在“时间/计数”行的情况下才会出现(这可能是文件中的错误)。以字母开头的行被认为是一种运输方式,任何其他行都是时间/计数。这可以进行调整(例如,删除注释行)。

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

【讨论】:

    【解决方案2】:

    逐行读取文件,查看该行是否包含-。如果是这样,那么您就知道必须从那里开始制作字典。否则,您将形成的字典附加到列表中。 这段代码就是这样做的 -

    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'}}]
    

    【讨论】:

    • 请注意len(line.split('-')) > 1 等价于"-" in line(您也可以将结果存储在s 之前 if 而不是拆分两次)和@987654328 @ 可以替换为单个 rsplit。此外,您要将数字存储为字符串,并在末尾添加一个额外的换行符(根据上下文可能会或可能不会有问题)。最后但并非最不重要的一点是,您将所有内容都放在一个字典中:运输方式丢失了。
    • 非常感谢您的建议。编辑答案以使其更好
    • "a-b-c".rsplit("-", 1)["a-b", "c"]
    • 很抱歉,当您赶时间时会发生这种情况。我觉得现在还可以。
    【解决方案3】:

    输入:

    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)
    

    输出:

     {'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'}
    

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2016-07-31
      相关资源
      最近更新 更多