1

Python スクリプトを使用して、ファイルの各列のすべての文字列を特定の順序で整列させたいと考えました。サンプル シナリオを使用して、問題と考えられる結果を説明しました。

#sample.txt

start() "hello"
appended() "fly"
instantiated() "destination"
do() "increment"
logging_sampler() "dummy string"

出力シナリオ

#sample.txt(indented)

start()           "hello"
appended()        "fly"
instantiated()    "destination"
do()              "increment"
logging_sampler() "dummy string"

ファイルを処理して上記のインデントを提供できるpythonライブラリはありますか?2列以上のファイルがあり、すべての列を同じ方法でインデントできるような一般的な解決策はありますか?

4

3 に答える 3

4

ファイルを処理して上記のインデントを提供できるpythonライブラリはありますか?いいえ

これは可能ですか?はい

parse your lineあなたはsへの道を知る必要があり、それからdisplay in a formatted manner

あなたの特定のケースでparsingは、最初に発生したスペースに基づいて文字列を分割するだけでよいので、簡単です。これは、 str.partitionを使用して簡単に実行できます。場合によっては、regexを使用する必要があるエキゾチックな解析ロジックが必要になることもあります。

FormattingFormat String Syntaxを知っていれば、さらに簡単です。

デモ

>>> for e in st.splitlines():
    left,_,right = e.partition(' ')
    print "{:<20}{:<20}".format(left, right)


start()             "hello"             
appended()          "fly"               
instantiated()      "destination"       
do()                "increment"         
logging_sampler()   "dummy string"  
于 2013-09-30T09:46:28.043 に答える
1

この関数は、文字列リストのリストを受け取り、リスト形式の行を返します。

def table(lines, delim='\t'):
    lens = [len(max(col, key=len)) for col in zip(*lines)]
    fmt = delim.join('{:' + str(x) + '}' for x in lens)
    return [fmt.format(*line) for line in lines]

残りは簡単です:

import re
with open(__file__) as fp:
    lines = [re.split(r' ', s.strip(), maxsplit=1) for s in fp]
print '\n'.join(table(lines))

http://ideone.com/9WucPj

于 2013-09-30T10:34:06.790 に答える
0

印刷にはタブ文字 (「\t」) を使用できますが、sample.txt をどのように印刷しているのかわかりません。

print string1+"\t"+string2

詳しくはこちら

于 2013-09-30T09:46:50.533 に答える