-1

各列が で区切られた 8 つの列を含むファイルをインポートした'\t'ので、インポート中にすべて'\t'が に置き換えられ'space''\n'分割されてインデックス作成が容易になります。次に、さらに分析するために入力ファイルからリストが生成されます。しかし、分析の結果、

lst =  ['PAIR', '1MFK', 'URANIUM', '82', 'HELIUM', '112', 3.6997']

一種のリストなので、私は入れます

final = '    '.join(lst)   

のような値を取得しますが、PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997
すべての値を出力すると、次のようになります

PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506 

ここでは、列のエントリが上下に並んでいるわけではありませんが、インデントはすべて同じです。

試してみまし'\t'たが、同じランダム化された結果が得られます。
助けてください。

4

3 に答える 3

1

私があなたを正しく理解していれば、あなたはこのような簡単なことをすることができます。

>>> s = '''PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
... PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
... PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
... PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506'''
>>> ll = [x.split() for x in s.split('\n')]
>>> for row in ll:
...   print ''.join(x.ljust(10) for x in row)
... 
PAIR      1MFK      1         URANIUM   82        HELIUM    112       3.6997    
PAIR      2JGH      2         PLUTONIUM 98        POTASSIUM 88        5.3003    
PAIR      345G      3         SODIUM    23        CARBON    14        1.664     
PAIR      4IG5      4         LITHIUM   82        ARGON     99        2.5506    

ここでは、10文字の固定列幅を使用しています。必要に応じて、事前に適切な列幅を計算することで、少し洗練されたものにすることができます。

>>> column_widths = [max(len(x) for x in l) for l in zip(*ll)]
>>> for row in ll:
...   print '  '.join(x.ljust(w) for x,w in zip(row, column_widths))
... 
PAIR  1MFK  1  URANIUM    82  HELIUM     112  3.6997
PAIR  2JGH  2  PLUTONIUM  98  POTASSIUM  88   5.3003
PAIR  345G  3  SODIUM     23  CARBON     14   1.664 
PAIR  4IG5  4  LITHIUM    82  ARGON      99   2.5506
于 2012-05-01T06:06:44.403 に答える
1

リストが多すぎない場合は、次のようにすることができます。

lst1 =  ['PAIR','1MFK','1','URANIUM','82','HELIUM','112','3.6997']
lst2 = 'PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003'.split(' ')
lst3 = 'PAIR 345G 3 SODIUM 23 CARBON 14 1.664'.split(' ')
lst4 = 'PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506'.split(' ')
lsts = [lst1, lst2, lst3, lst4]
sizes = [max(len(item) for item in l) + 2 for l in zip(*lsts)]
for lst in lsts:
    print "".join(word.ljust(sizes[i]) for i, word in enumerate(lst))

出力

PAIR  1MFK  1  URANIUM    82  HELIUM     112  3.6997  
PAIR  2JGH  2  PLUTONIUM  98  POTASSIUM  88   5.3003  
PAIR  345G  3  SODIUM     23  CARBON     14   1.664   
PAIR  4IG5  4  LITHIUM    82  ARGON      99   2.5506  

このアプローチの利点は、パディングする必要がある量を推測する必要がないことです。

于 2012-05-01T06:14:54.653 に答える
0

入力の各行がlst処理用のリスト()になると想定しています。処理ループ内で、印刷でフォーマットディレクティブを使用して出力を整列させることができます。

あなたの現在の入力ラインを考えると/ lst

lst =  ['PAIR', '1MFK', 'URANIUM', '82', 'HELIUM', '112', '3.6997']
final = ' '.join(lst)

それから:

print('%8s %8s %10s %4s %10s %5s %10s' % (tuple(final.split())))

必要に応じてフィールド幅を調整できます。

数字を並べる必要がある場合は、int()またはfloat()を介して文字列を数字に変換し、適切な書式設定ディレクティブを使用して小数点を並べることができます。たとえば%7.4f、floatや%4dintに使用します(ここでも、ニーズに合った値を選択します) )。

于 2012-05-01T06:08:46.180 に答える