从文件中读取值,自动创建变量以存储这些值

2024-04-19 07:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件params.txt,即以下形式(忽略颜色格式,这是纯文本文件而不是python代码):

Lx = 512 Ly = 512
g = 400
================ Dissipation =====================
nupower = 8 nu = 0
alphapower = -0 alpha = 0
================ Timestepping =========================
SOMEFLAG = 1
SOMEOTHERFLAG = 4
dt = 2e-05
[...and so on]

也就是说,变量由其值以=分隔,值是整数、浮点数和科学记数法的混合体,有时在一行上有两个变量/值对,用单个空格分隔,并且有表格的标题

================ HeadingToBeDiscarded ================

在python中,如何读取文本文件,并在python脚本中自动创建相同的变量,并为它们分配与文件中相同的值

每次文件的格式都是相同的,所以暴力强制是可能的,但我确信有一个优雅的python/regex解决方案(但我是python新手,几乎没有regex!)


Tags: 文件代码txt颜色格式lyparams形式
3条回答

现在,如果您想将.txt文件中的(硬编码?)数据转换为.py文件,您应该使用如下内容:

temp_list = []
with open("params.txt") as file:
    while True:
        line = file.readline()
        line = line.strip()
        value = line.split(' ')
        for i, word in enumerate(value):
            if word == '=':
                var = f'{value[i-1]} = {value[i+1]}'
                temp_list.append(var)
        if not line:
            break

with open('sets.py', 'w') as f:
    f.write('\n'.join(temp_list))

这将创建一个名为sets.py(您可以更改名称)的新python文件,并将所有值从文本文件存储到.py文件。现在要使用这些值,首先确保sets.py与您的主python scipt位于同一目录中,然后执行from sets import *现在您只需键入其名称即可访问这些值中的任何一个,并将其识别出来。试试看

这应该是可行的字典的,我认为

大概是这样的:

def getVariables():
with open("filename.txt",'r') as file:
    variables = {}
    while True:
        line = file.readline()
        line = line.strip()
        value = line.split(' ')
        for i, word in enumerate(value):
            if word == '=':
                variables[str(value[i-1])] = value[i+1]
        if not line:
            break
return variables

这将以字典的形式留下一个输出,其中的键为:变量名,值为:变量本身。像这样:

变量={'Lx':'512','Ly':'512','nupower':'8','nu':'0'}

我不知道如何实现某种方式来检测它是int还是float

我的建议是,你可能不应该这样储存

如果人们甚至不考虑阅读,那么就使用pickle来存储python对象

如果它对人类来说是可读/可编辑的,我建议使用csv文件或类似的东西

相关问题 更多 >