2016-04-27 11 views
0

ファイルのすべての行の最初の文字をプルして、新しいファイルにそれらの文字を印刷しようとしています。私はステップバイステップで作業しているので、すべての行の最初の文字をプルできるコードを作成しましたが、特定のファイルを読み込むコードを追加すると、ファイル全体を適切に反復処理していないように見えますコンテンツ。誰かが私のforループが反復しない理由を知っていますか?または、おそらく、iteratingですが、 '行'に文字を正しく追加しないという問題です。ファイルの最初の文字を返す

def secret2(m): 
    infile = open(m, 'r') 
    text = infile.read() 
    for line in text: 
     lines = text[0] 
     for i in range(len(text)): 
      if text[i] == '\n': 
       lines += text[i+1] 
      print(lines) 
      return(lines) 
     m.close() 

出力:

>>> secret2('file.txt') 
A 
'A' 
>>> 

適切な出力は次のようになります。

>>> secret2('file.txt') 
'ALICE' 
>>> 
+0

でなければなりません。 'for line in text:'は実際に行を読んでいません。 –

+0

@ cricket_007これは私のread()関数の使用によるものですか?意味、read()はデフォルトでchar-by-charになりますか?ああ、私は見ていると思う、または私は(= =)行=テキスト[0]ループの外に追加する必要がありますか? – penmas

+0

'read()'はファイル全体を一つの文字列として扱います。文字列のforループはcharによってcharになります。あなたは 'infileの行のために 'できたかもしれませんが、以下の1行のアプローチは私が使用するものです –

答えて

1

あなたのコードではなく、行の文字を反復処理されます。次のコードで各行の最初の文字を印刷することができます。

def secret2(m): 
    with open(m) as infile: 
     print(''.join(line[0] for line in infile if line)) 
0

各行を1つのデータとして考える必要があります。したがって、readの代わりにreadlines()を使用してください。あなたのコードは

def secret2(m): 
    infile = open(m, 'r') 
    text = infile.readlines() 
    for j in (text): 
     print j[0] 
関連する問題