2016-11-27 14 views
0

Pythonで関数から4番目のインデックス番号を抽出していますか?は、どのように私はこのことから番号を抽出しようとしています

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

タプルインデックスが許可されていないというエラーが表示されます。また、1つの要素を印刷するのではなく、半分の行を印刷しません。 助けてください。

私は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です。

あなたが求めているものに関しては:私はあなたが入力ファイルは、このようなinput_fileと呼ばれているとし

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

を:

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をラップすることですdictへ

だから、ここにあなたの質問に対する私の答えです:

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:長い答えを申し訳ありません。そしておそらく私の答えis'ntは最高のものですが、それはあなたを助けるかもしれません。

+0

ストックファイルの名前がStockFile.txtなので、最初の文をdef format_input(StockFile.txt = "")に置き換えます:そうですか?また、出力しようとすると、ファイルの代わりに--- {} ----が表示されます。どんな考え?あなたの助けを本当に感謝します。ありがとうございました:) – Anonymous

+0

StockFile.txtの入力ファイルがあなたの質問に追加したものと同じ入力を持っているなら、あなたは 'def format_input()'関数を追加することができます私の答えに書き込む。次に 'data = format_input(" input_file ")'のみを使用して範囲を決め、印刷したいデータを印刷します。あなたがそれを行うことができない場合、私はあなたのニーズを満たすために私の答えを更新することができます。 –

+0

あなたはそれを更新してニーズを満たすことができますか? – Anonymous

関連する問題