0

我正在尝试从下面的 input.txt 文件中提取数字信息。

    size : 5 4

    walls : 2 2 , 2 3

    reward : -0.04

    transition_probabilities : 0.8 0.1 0.1 0

    discount_rate : 0.85

    epsilon : 0.001

如您所见,有些行包含整数,有些包含整数列表,有些包含元组列表。但是,我特别希望能够检查一行的开头(使用 startswith() 函数),然后忽略我正在检查的部分。以下是我到目前为止的内容:

    f = open("mdp_input.txt", "r")

    for line in f:
        if line.lower().startswith("size : "):
            size_list = line.split(" ")
            cols = int(size_list[2])
            rows = int(size_list[1])
        elif line.lower().startswith("walls : "):
            walls = str(input("walls : "))
            walls_list = walls.split(",")
            for item in walls_list:
                tuple = tuple(map(int, item.split(' ')))
                walls.append(tuple)

我只是不太确定如何基本上忽略冒号之前的单词而只查看它之后的数字,特别是考虑到根据我需要的内容(整数、列表、列表元组等)。任何帮助将不胜感激,谢谢!

4

2 回答 2

0

通过用“:”分割代码来启动代码怎么样?然后您可以检查前半部分的标识符和后半部分的数据。

f = open("mdp_input.txt", "r")

for line in f:
    info = line.split(":")

if info[0].startswith("size"):
    size_list = info[1].split(" ")
    cols = int(size_list[2])
    rows = int(size_list[1])
elif info[0].startswith("walls"):
    walls_list = info[1].split(",")
    for item in walls_list:
        tuple = tuple(map(int, item.split(' ')))
        walls.append(tuple)
于 2019-11-21T18:57:00.520 回答
0

您可以使用该split功能首先用冒号分割您的行,取第二个元素(即冒号后面的部分),然后用该用例所需的任何字段分隔符分割它。我也没有在您的代码中调用变量元组,这将覆盖 tupe 函数,因此您将无法再次使用它。始终创建名称与 python 内置名称不冲突的变量。

data = """size : 5 4
walls : 2 2 , 2 3
reward : -0.04
transition_probabilities : 0.8 0.1 0.1 0
discount_rate : 0.85
epsilon : 0.001"""

for line in data.splitlines():
    if line.startswith('size'):
        col, row = [int(num) for num in line.split(':')[1].strip().split()]
        print(col, row)
    elif line.startswith('walls'):
        walls = []
        for wall in line.split(':')[1].strip().split(','):
            walls.append([int(num) for num in wall.split()])
        print(walls)

输出

5 4
[(2, 2), (2, 3)]
于 2019-11-21T18:53:52.917 回答