【问题标题】:How to ignore certain parts of a line in text file in Python?如何在 Python 中忽略文本文件中某行的某些部分?
【发布时间】:2020-03-17 18:52:14
【问题描述】:

我正在尝试从下面的 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)

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

【问题讨论】:

    标签: python-3.x markov-decision-process


    【解决方案1】:

    用“:”分隔代码会怎样?然后你可以检查前半部分的标识符和后半部分的数据。

    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)
    

    【讨论】:

      【解决方案2】:

      您可以使用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)]
      

      【讨论】:

      • 对不起,我没有早点回复,但感谢您的帮助!首先用冒号分割然后用所需的分隔符分割第二个元素是有意义的
      猜你喜欢
      • 2011-09-26
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2011-03-21
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多