【问题标题】:Creating a variable for each line in a txt file为 txt 文件中的每一行创建一个变量
【发布时间】:2021-01-27 22:12:43
【问题描述】:

我正在构建一个程序,该程序最终将能够构建有限自动机,并且处于读取 txt 文件以设置变量(分别为状态、字母、起始位置、最终位置和规则)的早期阶段.这是我到目前为止的代码:

def read_dfa(dfa_filename):
    dfa = open(dfa_filename, 'r')
    count = 0
    for line in dfa:
        count += 1
        states, alphabet, initial, final, rules = (line.format(count, line.strip()))

我目前面临的问题是第 1:4 行将始终提供我需要的数据,但是,rules 变量可能只是第 5 行,也可能是多行(5: n)。我如何做到这一点,以便我可以成功地将我想要的行存储到每个适当的变量中? 这是我面临的错误:'ValueError: Too many values to unpack (expected 5)' 这是 dfa_filename 的一个示例:

q1,q2   #states
a,b   #alphabet
q1   #initial
q2   #final
q1,a,q2   #rules
q1,b,q1   #rules
q2,a,q2   #rules
q2,b,q2   #rules

【问题讨论】:

  • 我认为一个简单的解决方案是切断最初的 4 并分别映射/解析它们,然后您可以使用剩下的全部作为“规则”。

标签: python file split


【解决方案1】:

您可以使用splitlines 并将前4 行分配给statesalphabetinitialfinal。然后,将剩余的行分配给rules

with open('textfile.txt') as input:
    data = input.read()
    states, alphabet, initial, final = data.splitlines()[0:4]
    rules = data.splitlines()[4:]

【讨论】:

    【解决方案2】:

    如果我理解正确的话,前 4 个总是按照这个顺序,然后有多个规则。而规则的数量可以改变吗?

    如果是这样,请尝试使用* 运算符解包。这允许将多个值解压缩到一个变量中:

    a, *b = 1, 2, 3
    

    导致 a=1 和 b=[2, 3]

    所以它应该是周围的东西

    states, alphabet, initial, final, *rules = (line.format(count, line.strip()))
    

    继续保存

    【讨论】:

      【解决方案3】:

      您可以使用list 解压缩列表中的文件,然后通过索引号获取所需的行。

      file_lines = list(open('textfile.txt'))
      states, alphabet, initial, final = file_lines[0:4]
      rules = file_lines[4:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        相关资源
        最近更新 更多