2016-11-27 43 views
0

我想从这个提取数提取第四届指数是多少?当我尝试使用类似的东西:如何从Python中的函数

reciept[3] or print(" {1}" .format(product,f.readline([2]))) 

它出现一个错误,说元组索引不允许。此外,它不打印一个元素,但不是我不想要的一半。 请帮忙。

我有一个股票文件,其中有6个产品代码的当前库存水平。该代码将用户输入的代码与股票文件的代码相匹配,显示代码,产品名称,当前库存水平和目标库存水平。我想现在从所有显示的值中提取当前的库存水平,这是我无法做到的。 股票文件看起来像这样:

GTIN  PRODUCT  PP  CSL TSL RSL 
12345670 cupcakes 1.50 50 50 25 
98765432 cakes  1.00 50 50 25 
12121212 toffees  0.50 50 50 25 
09090909 cement  1.00 50 50 25 
56565656 phones  3.00 50 50 25 
12321323 craters  2.00 50 50 25 

所以,我怎么能提取从GTIN用户输入CSL?

+0

'print()'不会返回任何内容。所以你变量'reciept'将等于'nul'值。 –

回答

3

print()不会返回任何东西,所以reciept的值是None,这当然是不可索引的。

至于你问:

with open('path/to/stockfile') as in_file: 
    lookup_dict = {x.split()[0]: x.split()[3] for x in in_file} 

csl = lookup_dict['98765432'] 
+0

我有一个库存文件,它有6个产品代码的当前库存水平。该代码将用户输入的代码与股票文件的代码相匹配,显示代码,产品名称,当前库存水平和目标库存水平。我想现在从所有显示的值中提取当前的库存水平,这是我无法做到的。 – Anonymous

+0

你可以从文件中发布示例行吗? –

+0

好吧,现在我们正在某处。这些是我认为的空白分隔。我会在我的答案中加入一段代码。 –

0

我假设你有一个输入文件名为input_file这样的:

GTIN  PRODUCT  PP  CSL TSL RSL 
12345670 cupcakes 1.50 50 50 25 
98765432 cakes  1.00 50 50 25 
12121212 toffees  0.50 50 50 25 
09090909 cement  1.00 50 50 25 
56565656 phones  3.00 50 50 25 
12321323 craters  2.00 50 50 25 

的第一件事,我想到是来包装你INPUT_FILE成字典。

所以,这里是我的回答你的问题:

def format_input(input_file = ""): 
    data, id_dict = {}, 1 
    aa = list(j for i in tuple(open(input_file, 'r')) for j in i.split(" ") if j != "") 

    for i in range (6, len(aa), 6): # range from the 6th pisition with step = 6 
     if i + 5 <= len(aa): 
      data[id_dict] = { 
       aa[0]: aa[i], 
       aa[1]: aa[i+1], 
       aa[2]: aa[i+2], 
       aa[3]: aa[i+3], 
       aa[4]: aa[i+4], 
       aa[5].replace("\n", ""): aa[i+5].replace("\n", "") 
       } 
      id_dict +=1 
     else: 
      break # If something goes wrong 
    return data 

输出:

print(format_input("input_file")) 

{ 
    1: 
    { 
    'PP': '1.50', 
    'RSL': '25', 
    'PRODUCT': 'cupcakes', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '12345670' 
    }, 
    2: 
    { 
    'PP': '1.00', 
    'RSL': '25', 
    'PRODUCT': 'cakes', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '98765432' 
}, 
3: 
    { 
    'PP': '0.50', 
    'RSL': '25', 
    'PRODUCT': 'toffees', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '12121212' 
}, 
4: 
    { 
    'PP': '1.00', 
    'RSL': '25', 
    'PRODUCT': 'cement', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '09090909' 
}, 
5: 
    { 
    'PP': '3.00', 
    'RSL': '25', 
    'PRODUCT': 'phones', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '56565656' 
}, 
6: 
    { 
    'PP': '2.00', 
    'RSL': '25', 
    'PRODUCT': 'craters', 
    'TSL': '50', 
    'CSL': '50', 
    'GTIN': '12321323' 
    } 

}

现在,如果你想访问你的数据,你可以这样做这个例子:

data = format_input("input_file") 
for i in data: 
    print("GTIN: {0} | PRODUCT: {1} | PP: {2} | CSL: {3} | TSL: {4} | RSL: {5}".format(
    data[i]["GTIN"], data[i]["PRODUCT"], data[i]["PP"], data[i]["CSL"], data[i]["TSL"], data[i]["RSL"])) 

输出:

GTIN: 12345670 | PRODUCT: cupcakes | PP: 1.50 | CSL: 50 | TSL: 50 | RSL: 25 
GTIN: 98765432 | PRODUCT: cakes | PP: 1.00 | CSL: 50 | TSL: 50 | RSL: 25 
GTIN: 12121212 | PRODUCT: toffees | PP: 0.50 | CSL: 50 | TSL: 50 | RSL: 25 
GTIN: 09090909 | PRODUCT: cement | PP: 1.00 | CSL: 50 | TSL: 50 | RSL: 25 
GTIN: 56565656 | PRODUCT: phones | PP: 3.00 | CSL: 50 | TSL: 50 | RSL: 25 
GTIN: 12321323 | PRODUCT: craters | PP: 2.00 | CSL: 50 | TSL: 50 | RSL: 25 

PS:很抱歉的长期答案。也许我的回答不是最好的,但它可以帮助你。

+0

由于我的stockfile名称是StockFile.txt,因此我会用def format_input(StockFile.txt =“”)替换第一个句子:对吧?而且当我尝试输出时,程序只显示---- {} ----而不是文件。任何想法为什么?真的非常感谢你的帮助,谢谢:) – Anonymous

+0

如果你的输入文件是StockFile.txt与你添加到你的问题中有相同​​的输入,你可以添加函数'def format_input()'就像我的写入我的答案。然后,您将只使用'data = format_input(“input_file”)'并将其输入并打印要打印的数据。如果你做不到,我可以更新我的答案来满足你的需求。 –

+0

你可以更新它来填补需求? – Anonymous

相关问题