2016-10-23 4 views
0

私はPythonの初心者であり、プログラミングにいくつかの困難を抱えています。私は、data.txtファイル内のインデックス番号を検索してから、ユーザーの入力に従ってアイテム全体を削除する必要があります。私のコードは次の通りです:Pythonコードの.txtファイル(JSON形式)でインデックス番号を検索する

if option == 'd': 
     if 'name' in open('data.txt').read(): 
      ind = int (input ("Menu item number to delete: ")) 
      with open ('data.txt') as data_file: 
       data = json.load(data_file) 
      if ind in data[ind]: 
       del data[ind] 
       json.dump(data, open('data.txt', 'w')) 
       data_file.close() 
       print ('Menu item deleted.\n') 
      else: 
       print ('No such items exist') 
       main() 
      main() 
     else: 
      print ('There are no menu items saved') 
      main() 

ユーザーが3を入力すると、3番目の項目が削除されます。コードは正常に動作していますが、ユーザーがファイルにインデックスを入力しているかどうかを調べる必要があります。indでデータが[ind]の場合、コマンドでエラーが発生しています:

ファイル "D:/R/043/N.py"、ライン41、inputSomething のデータにindがあれば[IND]: はIndexError:リストインデックス範囲外

即時ヘルプが理解されるであろう。

答えて

0

EDIT:

は、あなたが投稿JSONに基づいて、あなたは配列ではなく、キーによってインデックス付けのオブジェクトをロードしているので、あなたは、配列から特定の項目を削除したい場合は、あなたが最初に必要になります選択したアイテムの数が少なくとも含まれていることを確認してから、このアイテムを削除してください。

EDIT:メニューの最初のアイテムにユーザーが「0」を入力すると、このようなものはうまくいくでしょう:

 if len(data)-1 >= ind: 
      del data[ind] 
+0

これを行うことは役に立ちません。私はすでにこれを試して、このコードはリストに既にある項目を見つけることができません –

+0

あなたはロードしているjsonの抜粋を投稿できますか? – rumdrums

+0

[ { "名前": "ビッグマック"、 "カロリー":540、 "脂肪":29、 "タンパク質":25、 "炭水化物":45、 "ナトリウム":1040、 "コレステロール":75 }、 { "名前": "とてつもない大ぼら"、 "カロリー":760、 "脂肪":47、 "タンパク質":33、 "炭水化物":53、 「ナトリウム":1410、 "コレステロール ":100 }、 { " name ":" Icecream "、 " calories ":760、 "脂肪":47、 "タンパク質":33、 "炭水化物":53、 "ナトリウム":1410 "コレステロール":100 }、 { "名前": "マクドナルド"、 "カロリー ":760、 "脂肪":47、 "タンパク質":33、 "炭水化物":53、 "ナトリウム":1410 "コレステロール":100 } ]それ以外は正常に動作している –