2016-11-27 44 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

相關問題