如何在Python中从文件中读取参数值

5

我开始学习Python,在尝试从文件中读取值时遇到了一些问题。

我的参数文件大致如下:

var1 11111111
path_value "some/space containing path/file.txt"
var3 something
#some other values
var4 some/value1
var5 some/value2
var6 some/value3

这是我的代码:
file=open('this_file.txt')
for line in file:
    fields = line.strip().split()
    if(fields[0] in "var1"):
        ## this will give me 11111111
        var_1_value=fields[1]
    if(fields[0] in "path_value"):
        ## this will give me only till "/some/space
        path_value_contains=fields[1]

如何正确获取路径?我不确定这是否是一种有效的方法。请问您是否知道更好的方法?

我没有使用任何模块。


6
如果您想拥有像这样可由用户编辑的文本文件,我强烈建议您使用 configparser 标准库模块。如果您不需要它是可由用户编辑的,请考虑使用 pickle - Adam Smith
1
看看内置的ConfigParser示例。 这比自己实现要简单得多。 - shanmuga
2个回答

3

正如我在评论中提到的,强烈建议您使用一个标准库模块来解决这个问题。但如果您坚持自己编写,请注意以下问题:

if fields[0] in "path_value"

这并不是在测试fields[0]是否等于"path_value",而是在测试fields[0]是否为"p""a""t""h""_"等中的任意一个。

可以尝试改为:

if fields[0] == "path_value"

话虽如此,看起来你遇到的问题完全不同,仅仅与复制/粘贴错误有关。如果你使用的是Python3,可以尝试这样做:

for line in file:
    param_name, *param_values = line.split()
    param_value = ' '.join(param_values)
    # then proceed as usual

2

不必编写自定义文本格式并尝试读取它,您可以将参数放入字典中,让pickle 模块完成其余工作。

您可以使用pickle.dump(object, file)将Python对象写入文件。

随后,您可以使用object = pickle.load(file)从文件中读取Python对象。

此脚本将一个参数字典写入文件:

parameters = {
    'var1': 11111111,
    'path_value': 'some/space containing path/file.txt',
    'var3': 'something',
    'var4': 52
  }

import pickle

file_name = 'parameters.pickled'

with open(file_name, 'wb') as out_file:
  pickle.dump(parameters, out_file)

这个脚本从文件中读取参数字典:
import pickle

file_name = 'parameters.pickled'

parameters = pickle.load(open(file_name, 'rb'))

var1 = parameters['var1']
path = parameters['path_value']

print('var1 =', var1)
print('path =', path)

如果您不需要这个内容可读性强,那么这绝对是最好的答案!您甚至可以做一些丑陋的事情,比如 vars().update(parameters) - Adam Smith
еУЗпЉМжИСдЄНзЯ•йБУvars().update()гАВињЩжШѓжИСдїК姩е≠¶еИ∞зЪДеП¶дЄАдїґжЬЙиґ£зЪДдЇЛжГЕгАВ - Michael Laszlo
1
我强烈建议不要直接修改vars()字典,但有时候你需要使用一个丑陋的工具来完成一个丑陋的任务! :) - Adam Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接