2016-04-05 13 views
-4

私の設定で定義されている位置に基づいて、辞書のリストからデータを抽出するのに問題があります。 シナリオ: (私はいくつかのメソッド呼び出しを介して)頂点テーブルからdictのリストを取得していると私はそのファイルをアップロードすることができますので、私はそれらのデータ(ヘッダーとデータコンテンツとしての値としてキー)他の目的のためにsftpに。 「表」のデータは0から10まで開始され、「列」は、11から25まで開始され、その後、「データ型」は25からに開始するように定義されたPythonでの位置に基づいてファイルにデータを書き込む方法

# data received in a list of dict 
new_list = [{'Table':'A', 'Column':'C1', 'DataType':'int'}, 
      {'Table':'A', 'Column':'C2', 'DataType':'varchar'}, 
      {'Table': 'B', 'Column': 'C3', 'DataType': 'int'} 
      ] 

マイ構成ファイル内の35。また、定義された範囲を満たすのに十分なデータがない場合は、指定されたフィールド長に達するまでデータの後ろにスペースを入れる必要があります。だから私は以下のような出力を期待しています。リストは本質的に動的です。私はseek()を使用しなければならないことを知っているが、ちょっと混乱している。

Table   Column     DataType 
A    C1      int 
A    C2      varchar 
B    C3      int 

どのような提案ですか?

+0

あなたのデータが脆弱で無駄であることを知るためにリストのインデックスに依存する。私はリストよりも別のデータフォーマットを使うだろう。辞書の辞書はどうですか?ジュソン?とにかく、私は正確に質問を理解していることは分かりません。あなたのファイルを書くコードはどこですか? – jDo

+0

私の推奨は 'struct'モジュールを使用していますが、長い答えになります –

+0

' w + 'モードで書き込みと更新のためにファイルを開きます。目的の場所に移動するには 'seek()'を呼び出し、 'write()'を使用して目的のデータを書き込みます。 –

答えて

1

、:

>>> def f(lst): 
     print('{:<10s}{:<15s}{:<10s}'.format(*['Column','Table','DataType'])) 
     for row in new_list: 
      s = '{d[Column]:<10s}{d[Table]:<15s}{d[DataType]:<10s}'.format(d=row) 
      print(s) 


>>> f(new_list) 
Column Table   DataType 
C1  A    int  
C2  A    varchar 
C3  B    int 
+0

ありがとうございます。データが正しくフォーマットされているようです。ヘッダーにも同じことをする必要があります。 @アイアンフィスト – Pradeep

+0

@Pradeep ..あなたは練習としてそれを自分で行うことができますが、コードは更新されました。 –

+0

@Pradeep ...この回答があなたのために適切な解決策を提供していると感じたら、それを受け入れるように自由に感じてください。そうでなければ、あなたの問題がまだ解決されない場合は、 –

0

私は、部分的に推測しているが、多分これはあなたが望むものである:

new_list = [{'Table':'A', 'Column':'C1', 'DataType':'int'}, 
      {'Table':'A', 'Column':'C2', 'DataType':'varchar'}, 
      {'Table': 'B', 'Column': 'C3', 'DataType': 'int'} 
      ] 
# print in terminal 
print "\t".join(new_list[0].keys()) 
for d in new_list: 
    print "{}\t{}\t{}".format(d["Table"], d["Column"],d["DataType"]) 

# write to file 
with open("outfile", "w") as f: 
    f.write("\t".join(new_list[0].keys()) + "\n") 
    for d in new_list: 
     f.write("{}\t{}\t{}\n".format(d["Table"], d["Column"],d["DataType"])) 

結果:string formatting使用して、私はこれが何をしたいと思い

$ cat outfile 
Column Table DataType 
A  C1  int 
A  C2  varchar 
B  C3  int 
+0

がありますが、データの開始と終了の位置はどこに記載されていません。私は各ヘッダーの位置に従う必要があります。そうでない場合、他のプロセスは間違ったデータを読み込みます。 @jDo – Pradeep

+0

@Pradeepそれでは、new_list [0:9]: 'dの中でnew_list [10:24]:' dの中で '' dを実行してください。列が常に10個離れていれば、モジュラス9または10 – jDo

関連する問題