2017-01-24 13 views
-1

テキストファイルから辞書を作成したいと思います。Python - ファイルから配列を含む辞書を作成する

テキストファイル:これが動作するために必要とされるであろうどのようなコード

accounts = { 
'jdoe' : ['doe','John Doe', '0001', True], 
'jsmith' : ['smith', 'John Smith', '0002', False] 
} 

***Comment line - not to be read by program*** 
jdoe | doe | John Doe | 0001 | True 
jsmith | smith | John Smith | 0002 | False 

辞書には、好ましくは次のようになりますか?

+1

これは[JSON](https://docs.python.org/3/library/json.html) – ti7

+0

ようこそとしてのStackOverflowにずっと簡単になり得ます。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [on topic](http://stackoverflow.com/help/on-topic)および[How to Ask](http://stackoverflow.com/help/how-to-ask)をここで適用してください。 StackOverflowは、コーディングまたはチュートリアルサービスではありません。 – Prune

+0

@ ti7 jsonではこれがなぜ簡単だろう?多くのプログラムがcsvを読み書きします。私たちはこのデータの出所について何も知らず、その情報源を変更することは非常に困難かもしれません。 jsonはシリアライズプロトコルではなく、シリアライズプロトコルです。 – tdelaney

答えて

1

簡単な解決策は、次のようになります。

accounts={} 
with open("replacethiswithrealfilename") as f: 
    for line in f: 
     line=line.strip() 
     if line.startswith("***") or not line: 
      continue # ignore comments, ignore empty lines 
     sl=[s.strip() for s in line.split("|")] 
     sl[-1]=(sl[-1]=="True") 
     accounts[sl[0]]=sl[1:] 
0

私はちょうどあなたが何かを持っているので答えますが、ええ、あなたはPythonコーディングの本を読むべきです。

b = {} #your final dictionary 
a = "jdoe | doe | John Doe | 0001 | True" # for loop through the lines in a file, this is just one line 
a = a.split('|') #splits up your string into a list 
b[a[0]] = a[1:] # {'jdoe ': [' doe ', ' John Doe ', ' 0001 ', ' True']} 
1

このような何か:

text_file_path = r'your_path' 

accounts = {} 
with open(text_file_path) as f: 
    for line in f.readlines()[1:]: 
     info = line.split(' | ') 
     if info: # possibly ignore blank line at end of file 
      key, values = info[0], info[1:] 
      values[-1] = values[-1] == 'True' 
      accounts[key] = values 

print(accounts) 
0

あなたはタプルの行としてファイルを読み込んでから辞書を作成するためにcsvモジュールを使用することができますそれは反復可能です。複雑な要因はコメント行ですが、読者が表示する前にそれらを削除するジェネレータを使って処理することができます。それをすべて一緒に入れて、あなたは

import csv 

def strip_comments(fp): 
    """iterate uncommented lines of a file""" 
    for line in fp: 
     if not line.startswith('***'): 
      yield line 

with open('test.csv', 'r', newline='') as in_file: 
    reader = csv.reader(strip_comments(in_file), delimiter="|", skipinitialspace=True) 
    accounts = {row[0]:row[1:] for row in reader} 
関連する問題