0

私はPythonを初めて使用し、学生プロジェクトに取り組んでいるときにいくつかの問題に苦しんでいます。基本的に、列でフォーマットされたテキスト ファイルからデータを読み込もうとします。リストのリストにデータを保存し、データを並べ替えて操作し、再度ファイルに書き込みます。私の問題は、書き込まれたデータを適切な列に揃えることです。私はいくつかのアプローチを見つけました

"%i, %f, %e" % (1000, 1000, 1000)

しかし、列がいくつになるかわかりません。すべての列を固定幅に設定する方法があるのだろうか。

入力データは次のようになります。

2     232.248E-09         74.6825             2.5         5.00008         499.482
5             10.         74.6825             2.5        -16.4304           -12.3

これは、リストのリストにデータを保存する方法です。

  filename = getInput('MyPath', workdir)
  lines = []
  f = open(filename, 'r')
    while 1:
        line = f.readline()
        if line == '':
            break
        splitted = line.split()
        lines.append(splitted)            
    f.close()

データを書き込むために、最初に list のリストのすべての行要素を 1 つの文字列に入れ、要素間に空き固定スペースを置きます。しかし、代わりに、要素を含む固定の合計スペースが必要です。しかし、ファイル内の列数もわかりません。

for k in xrange(len(lines)):
    stringlist=""
    for i in lines[k]:
        stringlist = stringlist+str(i)+'        '
    lines[k] = stringlist+'\n'

    f = open(workdir2, 'w')
    for i in range(len(lines)):
        f.write(lines[i])
    f.close()

このコードは基本的に機能しますが、残念ながら出力が適切にフォーマットされていません。

この問題についてご協力いただきありがとうございます。

4

2 に答える 2

0

文字列の書式設定は、次の方法で行うことができます。

>>> print("%10s%9s" % ("test1", "test2"))
     test1    test2

最初にそれらの数値から文字列を作成し、次に上で示したようにフォーマットすることをお勧めします。

あなたの書いたコードを完全に理解することはできませんが、次のように取り組んでみてください。

from itertools import enumerate

with open(workdir2, 'w') as datei:
    for key, item in enumerate(zeilen):
        line = "%4i %6.6" % key, item
        datei.write(item)
于 2013-04-04T09:45:35.630 に答える
0

上記のように、文字列の書式設定を使用して幅を書式設定できるようになることについては、まったく正しいです。しかし、あなたが正しく指摘しているように、トリッキーなビットは、可変サイズの出力リストに対してこれを行うことです。代わりに、join() 関数を使用できます。

output = ['a', 'b', 'c', 'd', 'e',]

# format each column (len(a)) with a width of 10 spaces
width = [10]*len(a)

# write it out, using the join() function
with open('output_example', 'w') as f:
    f.write(''.join('%*s' % i for i in zip(width, output)))

書き出す:

'         a         b         c         d         e'

ご覧のとおり、フォーマット配列widthの長さは、出力の長さによって決まりlen(a)ます。これは、オンザフライで生成できるほど柔軟です。

お役に立てれば!

于 2013-04-04T09:54:50.843 に答える