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

时间:2015-09-17 16:09:13

标签: python file

我开始学习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]

如何正确获取路径?我不确定这是一种有效的做事方式。你能告诉我任何更好的方法吗?

我没有使用任何模块。

2 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,我强烈建议你使用一个擅长这个的stdlib模块,但是如果你打算自己动手,那就是问题:

if fields[0] in "path_value"

如果fields[0] 等于 "path_value",那就不测试fields[0] "p""a"中的任何一个"t" 1}},"h""_"if fields[0] == "path_value" for line in file: param_name, *param_values = line.split() param_value = ' '.join(param_values) # then proceed as usual 等。

尝试改为:

WITH 
      MEMBER [Measures].[MaxValue] AS
      MAX([Date].[Fiscal].[Fiscal Year].Members, [Measures].[Sales Amount]) 
SELECT 
      {[Measures].[MaxValue]} ON COLUMNS

FROM
      [Adventure Works]

那就是说,你似乎遇到了一个完全不同的问题,而且这个问题只与复制/粘贴错误有关。如果您使用Python3,可以尝试这样做:

WITH 
      MEMBER [Measures].[MaxValue] AS
      MAX([Date].[Fiscal].[Fiscal Year].Members, [Measures].[Sales Amount]) 
SELECT 
      {[Measures].[Sales Amount],[Measures].[MaxValue]} ON COLUMNS,
      {[Date].[Fiscal].[Fiscal Year].Members} ON ROWS 
FROM
      [Adventure Works]



+---------+----------------+----------------+
|         |  Sales Amount  |    MaxValue    |
+---------+----------------+----------------+
| FY 2005 | (null)         | $52,714,102.75 |
| FY 2006 | $23,360,526.01 | $52,714,102.75 |
| FY 2007 | $33,683,804.82 | $52,714,102.75 |
| FY 2008 | $52,714,102.75 | $52,714,102.75 |
| FY 2009 | $50,840.63     | $52,714,102.75 |
| FY 2010 | (null)         | $52,714,102.75 |
| FY 2011 | (null)         | $52,714,102.75 |
+---------+----------------+----------------+

答案 1 :(得分:2)

您可以将参数放入字典中,让pickle module完成剩下的工作,而不是编写自定义文本格式并尝试重新读取。

您可以使用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)