如何从python

时间:2016-11-27 18:29:36

标签: python

我试图从中提取一个数字:

reciept = print("the quantity:",List2,"the product:", "{0} {1}" .format(product,f.readline())) 
#it prints the stock details for the product a user asks.

如何从此行中提取特定元素?当我尝试使用类似的东西时:

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?

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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:很抱歉答案很长。也许我的答案不是最好的,但它可能对你有帮助。