13

コード#1が余分な空の行を返すのに、コード#2が返さない理由がわかりません。誰かがこれを説明できますか?違いは、コード#2の最後に余分なコンマがあることです。

# Code #1
file = open('tasks.txt')

for i, text in enumerate(filer, start=1):
    if i >= 2 and i <= 4:
        print "(%d) %s" % (i, text)

# Code #2
file = open('tasks.txt')

for i, text in enumerate(filer, start=1):
    if i >= 2 and i <= 4:
        print "(%d) %s" % (i, text),

これが私のtasks.txtファイルの内容です:

line 1
line 2
line 3
line 4
line 5

コード#1の結果:

(2) line 2

(3) line 3

(4) line 4

コード#2の結果(望ましい結果):

(2) line 2
(3) line 3
(4) line 4
4

5 に答える 5

20

印刷ステートメントの末尾,は、改行を抑制します。最初のprintステートメントにはありませんが、2番目のprintステートメントにはあります。

\n読み取った入力には、余分な改行の原因となるがまだ含まれています。これを補う1つの方法は、末尾のコンマを使用して、印刷が独自の改行を発行しないようにすることです。あるいは、おそらくより良いアプローチとして、入力を読むときに入力の改行を削除することができます(たとえば、を使用してrstrip()

于 2012-05-04T21:24:51.603 に答える
5

この問題に対する最も一般的な答えは、読んだらすぐに末尾の改行(ある場合)を削除することです。

f = open('tasks.txt')
for i, text in enumerate(f, start=1):
    text = text.rstrip('\n')
    if i >= 2 and i <= 4:
        print "(%d) %s" % (i, text)

そうすれば、出力を入力から切り離すことができます...出力コードは20行離れているか、別の関数/メソッドにあるか、別のモジュールにある可能性があります。printステートメントの最後にコンマを使用して入力の改行を補正することは、堅牢なソリューションではありません。

于 2012-05-04T21:51:24.587 に答える
2

,空白行をなくすには、printステートメントの最後に必要です。

例:

for i in range(10):
    print i,

>>>0 1 2 3 4 5 6 7 8 9

for i in range(10):
    print i

>>>
0
1
2
3
4
5
6
7
8
9
于 2012-05-04T21:30:44.737 に答える
2

これには非常に簡単な修正があります。

引数として、次の値を使用して読み取っている.txtファイル(numbers.txtと呼ばれる)があるとします。

234234
777776
768768

次に、次のコードを使用します。

filename = numbers.txt

with open(filename) as file_object:
    for line in file_object:
        print(line)

あなたが問題を抱えているのであなたに余分な空白行を与えるでしょう。ただし、わずかな変更で、rstrip()メソッドを使用して余分な空白行を取り除くことができます。したがって、コードは次のようになります。

filename = numbers.txt

with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip())

今、あなたはそれらの間にそれらの迷惑な空白行なしであなたの結果を得るでしょう!

于 2017-05-16T09:35:10.413 に答える
1

ファイルを反復処理すると、ファイルから改行が保持されます。つまり、印刷物からの改行と文字列からの改行が1つずつあります。

ファイルのセマンティクスをテストする良い方法は、を使用することStringIOです。見てください:

>>> from StringIO import StringIO
>>> x = StringIO("abc\ncde\n")
>>> for line in x: print repr(line)
... 
'abc\n'
'cde\n'

Levonが言うように、コンマは印刷からの改行を抑制し、文字列からの改行のみが存在するようにします。

を使用して文字列から改行を削除しますs.rstrip('\n')。現代的な形式(Unix、Windows、または古いMac OS)の末尾の改行を取り除きます。したがって、代わりに行うことができますprint "(%d) %s" % (i, text.rstrip('\n'))

于 2012-05-04T21:25:47.953 に答える