【问题标题】:How read an array in a txt file?如何读取txt文件中的数组?
【发布时间】:2019-06-20 14:59:35
【问题描述】:

我需要从 .txt 文件中读取这些行:

Turn  60 Player  -1
board: [[ 0  0  0  0  1  2  0  6 12  0  1  0  0  5  5 21]]
action p-values: [0.0, 0.0, 0.0, 0.0, 0.6326530612244898, 0.3673469387755102, 0.0]
nn: legal moves:[4, 5]
nn: select: 4
nn: db_lookup  0 0 0 0 1 2 0 6 12 0 1 0
nn: scores: [127, 127, 127, 127, -4, -5]
nn: best move selected

如何提取数组动作 p 值中的数字?

我需要创建相同的数组。

这是我的出发点:

with open(match, 'r') as searchfile:
        for line in searchfile:
            if 'Turn' in line:
                line = next(searchfile)
                line = next(searchfile)
                if 'p-values' in line:
                    line.rstrip('\n')
                    fields = line.split(": ")
                    pvalues.append(fields[1])

但是,如果我尝试打印 pvalue,我会得到一个内部包含字符串的数组(包括 \n)。如何在 pvalues 和数组中包含 float 数组?

谢谢

【问题讨论】:

标签: python split readline


【解决方案1】:

您可以使用 ast 库将字符串转换为列表,并且您的 rstrip 中也存在错误。见下文。

import ast
pvalues=[]
with open('match', 'r') as searchfile:
        for line in searchfile:
            if 'Turn' in line:
                line = next(searchfile)
                line = next(searchfile)
                if 'p-values' in line:
                    line=line.rstrip('\n')
                    fields = line.split(": ")
                    pvalues.append(ast.literal_eval(fields[1]))
pvalues

Result:
[[0.0, 0.0, 0.0, 0.0, 0.6326530612244898, 0.3673469387755102, 0.0]]

【讨论】:

    【解决方案2】:

    可以先根据:进行拆分,然后去掉换行符\n再用literal_eval将字符串转成列表

    from ast import literal_eval
    
    with open(match, 'r') as searchfile:
        for line in searchfile:
            if 'Turn' in line:
                line = next(searchfile)
                line = next(searchfile)
                if 'p-values' in line:
                    fields = line.split(": ")
                    print (fields)
                    pvalues = literal_eval(fields[1].strip('\n'))
    
    print (pvalues)
    # [0.0, 0.0, 0.0, 0.0, 0.6326530612244898, 0.3673469387755102, 0.0]
    

    【讨论】:

      【解决方案3】:

      re.findall函数准确:

      import re
      
      with open('file.txt') as f:
          pvalues = []
          pat = re.compile(r'\d+\.?\d+')
          for line in f:
              if 'Turn' in line:
                  next(f)
                  line = next(f)
                  if 'p-values' in line:
                      num_str = line.strip().split(": ")[1]
                      pvalues.append(list(map(float, pat.findall(num_str))))
      
      print(pvalues)
      

      输出(带有浮点数的列表列表):

      [[0.0, 0.0, 0.0, 0.0, 0.6326530612244898, 0.3673469387755102, 0.0]]
      

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        相关资源
        最近更新 更多