2017-08-31 3 views
0

私は、行単位でテキストファイルのデータを出力する関数を記述しようとしています。出力には、コロンとスペースのあとに続く行の番号が必要です。私は次のコードを思いついた。ファイルからPythonの行を印刷する

def print_numbered_lines(filename): 
    """Function to print numbered lines from a list""" 
    data = open(filename) 
    line_number = 1 
    for line in data: 
     print(str(line_number)+": "+line, end=' ') 
     line_number += 1 

問題は、私が作成したテストテキストファイルを使用してこの機能を実行すると、最初の行はすなわち、出力の残りの行と同じインデントレベルではないです。出力は一種のように見える 1: 9874234,12.5,23.0,50.0 2: 7840231,70,60,85.4 3: 3845913,55.5,60.5,80.0 4: 3849511,20,60,50 どこが間違っていますか?ありがとう

+0

問題が解決した場合は、回答を受け入れてください。 –

答えて

0

あなたはend引数をスペースとして指定しました。最初の行の後にそれぞれ余分のスペースがあります。エンディングで

'9874234,12.5,23.0,50.0\n' 

ルック:ファイルからの読み取りは、このようsomehtingに見える

ライン。行の翻訳は元の行によるものです。ですから、あなただけの空の文字列(いないスペース)への印刷のend引数を変更する必要が欲しいものを得るために

また、私は、関数の実装を変更し、行番号のためenumerateを使用することができ助言します。

def print_numbered_lines(filename): 
    data = open(filename) 
    for i, line in enumerate(data): 
     print(str(i+1)+": "+line, end='') 
2

endの値をスペースではなく空の文字列に置き換えます。 end引数は空白なので、すべての行の後に空白が表示されます。したがって、後の行には行頭にスペースがあります。

def print_numbered_lines(filename): 
    """Function to print numbered lines from a list""" 
    data = open(filename) 
    line_number = 1 
    for line in data: 
     print(str(line_number) + ": " + line, end='') 
     line_number += 1 

あなたがこれを行うことができます別の方法として、end引数に任意の値を渡さずstrip新線やプリントです。これにより、行の末尾にある\nが削除され、新しい行がデフォルトでend="\n"として出力されます。

def print_numbered_lines(filename): 
    """Function to print numbered lines from a list""" 
    data = open(filename) 
    line_number = 1 
    for line in data: 
     print(str(line_number) + ": " + line.strip("\n")) 
     line_number += 1 
0

これは、printステートメントと関連があります。

print(str(line_number)+": "+line, end=' ')

あなたはおそらく、あなたのラインを印刷するときに、それらの間の余分な行があったことを見て、あなたがend=' 'を使用することによってこの問題を回避しようとしました。

「空白」行を削除する場合は、line.strip()を使用してください。これで削除されます。この

用途:

print(str(line_number)+": "+line.strip())

ストリップはまた、引数を取ることができます。これはドキュメントからです:

str。ストリップ(の[chars]

戻る先頭と末尾の文字が削除を持つ文字列のコピー。 chars引数は、削除する文字の集合を指定する文字列です。省略した場合とNoneを指定した場合、chars引数はデフォルトで空白文字を削除します。 chars引数は接頭辞または接尾辞ではありません。むしろ、その値のすべての組み合わせが取り除かれます。

それはどうなりますか?

ファイル内の行は、何もせずに別の行に区切られていません。 Linuxでは改行は\nで表されます。通常のエディタは、テキストを新しい行にプッシュすることによってこれらを変換します。

ファイルを読むとき、Pythonはこれらの行を正確に区切りますが、それらを捨てないでください。\n印刷時には、それらは再び解釈され、改行と組み合わされてprintが追加されます。「あまりにも多くの改行」が追加されます。

printステートメントのendパラメータは、単に行を印刷した後にprintが使用するものを変更します。デフォルトは\nです。あなたがend=" !"を使用するとき、それが何をするか

チェック:

1: aaa 
!2: bbb 
!3: ccc 

あなたが「AAA」(文字列の一部である)改行を引き起こし、その印刷後の後\nを見ることができるがendの内容を追加します。したがって、!が追加されます。次の行は、同じ行に印刷されます。これは、改行がないために改行が印刷されないためです。

関連する問題