2017-07-19 6 views
1

ファイルに表形式で書きたいと思います。これまで書いたコードは次のとおりです。Pythonで文字列をフォーマットする

file_out=open("testing_string","w") 
file_out.write("{0:<12} {1:<20} {2:<30}\n".format("TUPLE","LOGFILE STATUS","FSDB STATUS")) 
file_out.write("{0:12}".format("Check")) 
file_out.write("{0:12}".format("_5")) 
file_out.close() 

Testing_stringは次のようになります。

TUPLE  LOGFILE STATUS  FSDB STATUS     
Check  _5  

問題は_5チェックしたいですか?私は_5でチェックを連結できないことを確認してください。チェックがファイルに最初に表示されてから、LOGFILE STATUS FSDB STATUSを埋めるロジックが消えます。私がステータスを記入できない場合は、_5を付ける必要があるかどうかを確認します。このため、私は文字列を連結することはできません。チェックの隣に_5を印刷するには?

+0

は、計算を行います。 'Check ''を書き出してから '_5'を書き出すためにバックスペースを使うことはできません。 – AChampion

+0

@AChampion真実ではありません。 「ASCII」(http://www.asciitable.com/)文字コード8で、文字通り「バックスペース」と呼ばれる「\ b」文字を使用することができます。エレガントではありませんが、可能です。 – SethMMorton

+0

これは依存するでしょう...ファイルには、より多くの、あるいはうまく動作しない 'Check \ b \ b \ b_5'が含まれています。そのファイルを表示すると正しいことが表示されますが、ファイルには余分な文字が含まれています(例:もしあなたがそれをPythonで読み込めば、あなたは明示的に '\ b \ b \ b'を扱わなければなりません。 – AChampion

答えて

1

問題はCheckのための12文字を指定しているということです。これを試してください:あなたはそれを書き出す前に

file_out=open("testing_string","w") 
file_out.write("{0:<12} {1:<20} {2:<30}\n".format("TUPLE","LOGFILE STATUS","FSDB STATUS")) 
file_out.write("{0:5}".format("Check")) 
file_out.write("{0:7}".format("_5")) 
file_out.close() 
2

完璧な世界では、あなたは以下の答えで与えられたことをしません。それはハッキーでエラーが起こりやすく、本当に変です。完璧な世界では、の前にのディスクに実際に書き込む方法を書き出す方法を考え出します。私はあなたがこれを考慮している唯一の理由は、あなたが古くて硬いレガシーコードを維持しており、正しい方法ではできないことだと考えています。


これはもっとも洗練された答えではありませんが、バックスペース文字を使用して前に書き込まれたものを上書きすることができます。

with open('test.txt', 'w') as file_out: 
    file_out.write("{0:<12} {1:<20} {2:<30}\n".format("TUPLE","LOGFILE STATUS","FSDB STATUS")) 
    file_out.write("{0:12}".format("Check")) 
    backup_amount = 12 - len("Check") 
    file_out.write("\b" * backup_amount) 
    file_out.write("{0:12}".format("_5")) 

出力時:

TUPLE  LOGFILE STATUS  FSDB STATUS     
Check_5 

我々は完全に新しい文字を以前に書かれた文字を上書きしているので、この特定のケースではこれだけの作品 - バックスペースはほぼカーソルをバックアップしますが、実際には、以前に上書きされることはありません書かれたデータ。お守り:

with open('test.txt', 'w') as f: 
    f.write('hello') 
    f.write('\b\b') 
    f.write('p') 

出力:

helpo 

を、我々は2つの文字をバックスペースだけ元の第2の文字がまだ存在しているものを、書いたので。これらを上書きするには、手動で' '文字を書き込む必要があります。

'_5'を追加すると、フォーマットコードの長さ('{0:12}''{0:5}'などになる可能性があります)が発生する可能性があります。それは乱雑になるだろう。

+0

ファイルに 'Check \ b \ b \ b_5'が含まれていないことを確認してください。これは' Check_5'ではなく、これで十分であるかもしれません。個人的には、私はこれを行うための他の方法を見つけるだろう。 – AChampion

+0

@AChampion合意しました。これは、これが悪い考えであり、OPが最初に正しい方法でそれをやろうとしなければならないということを一番上の段落に示しています。 – SethMMorton

関連する問題