【问题标题】:Text file reading input variables from txt file文本文件从 txt 文件中读取输入变量
【发布时间】:2020-03-02 18:57:31
【问题描述】:

我确实有一个这种格式的文本文件

instance_name = "small_instance_01_simple";
d = 2; 
r = 3;
SCj = [80 57]; 
Dk = [96 22 14];
Cjk = [[81 51 31]  [82 47 54]];

如何在我的 python 代码中获取这些变量的值?我尝试了更多方法,但都没有成功

【问题讨论】:

  • 我尝试了更多方法,但都没有成功告诉我们你尝试了什么。
  • 你能改变文本文件格式吗?如果它是像 JSON 这样的标准格式,这会容易得多。
  • 您是想将其读入带有键/值对的字典,还是读入程序变量名称“instance_name”等?
  • 我不能。我需要使用 .dat 文件
  • 此 .dat 文件是否具有已知格式?也许在某处已经有该格式的解析器。什么程序使用它?

标签: python python-3.x file


【解决方案1】:

首先让我们导入re 并定义我们的类文件对象:

import re

s = StringIO("""
    instance_name = "small_instance_01_simple";

    d = 2;

    r = 3;

    SCj = [80 57];

    Dk = [96 22 14];

    Cjk = [[81 51 31] [82 47 54]];
""")

parse_value 函数尝试将expr 解析为原语,如果它作为序列失败,最后作为字符串失败:

def parse_value(expr):
  try:
    return eval(expr)
  except:
    return eval(re.sub("\s+", ",", expr))
  else:
    return expr

parse_line 函数解析每一行并返回变量名称和值(如果有):

def parse_line(line):
    eq = line.find('=')
    if eq == -1: raise Exception()
    key = line[:eq].strip()
    value = line[eq+1:-2].strip()
    return key, parse_value(value)

现在让我们提取变量:

vars = {}
for line in s.readlines():
  try:
    key, val = parse_line(line)
    vars[key] = val
  except:
      pass

让我们看看我们有什么:

for key, value in vars.items():
  print(key, value, type(value))

输出:

instance_name small_instance_01_simple <class 'str'>
d 2 <class 'int'>
r 3 <class 'int'>
SCj [80, 57] <class 'list'>
Dk [96, 22, 14] <class 'list'>
Cjk [[81, 51, 31], [82, 47, 54]] <class 'list'>

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多