2011-02-04 11 views

答えて

2

file.seekを使用して次の読み取り位置を移動することはできますが、それは非効率的です。すでに行を読み込んでいるので、2度目に読み取ることなく lineを処理するだけで済みます。

with open(filename,'r') as f: 
    line = f.readline() 
    print("length = ", len(line)) 
    if 'b' in line: 
     print("letter 'b' found.") 

    for line in f: 
    ... 
+0

@Dieseltjuh:

with open('file.txt', 'r') as f: for line in f: for character in line: if character == "b": print "letter 'b' found." 

するか、あなただけの数が必要な場合'readline'を使って最初の行を特別に処理し、残りのファイルをループします。すべての行を同じ方法で処理したい場合は、 'readline'を使わないでください。これが明確になることを願っています。 – unutbu

+0

'readline'ではなく、' line = next(f) '(または' f.next() 'をPythonのバージョンに応じて行うことができます)。 –

1

最初の行を特別に処理する必要があるようです。

lineno = 1 
found = False 
for line in file: 
    if 'b' in line: 
     found = True 

    if lineno == 1: 
     print("length of first line: %d" % len(line)) 
    lineno += 1 

if found: 
    print("letter 'b' found.") 
+0

これはあまりよく考えられていません。すべての反復で 'lineno'をテストしインクリメントするのではなく、' next'を使って最初の行を別々に扱うことができます。また、 'file'はPythonの組み込みであり、変数名としては使用しないでください。 –

+0

@次の方法は、最初の行で「b」をスキップします。質問は非常に不明で、私の答えは推測でした:OPは最初の行を特別に扱い、長さを印刷し、同時にファイル全体に*文字bが含まれているかどうかをチェックする必要があります。 – ulidtko

0

それはあなたがこのような何かしたいように聞こえる:あなたが最初に処理する必要がある場合:

with open('file.txt', 'r') as f: 
    b = sum(1 for line in f for char in line if char == "b") 
print "found %d b" % b 
+0

文字を検索するために文字列全体をループする必要はありません。 '' string 'の 'b'はそれを行います。 – ulidtko

+0

@ulidtko:私はそれを検索しようとしていません、私は出現の数を数えようとしています。 '' b 'は '' bbbbbb''に対して 'True'を返します。' sum(char == "b"は行内のchar) 'は' 6'を返します。 –

+0

私は最初のコードスニペットについて話していました。 'for character in line:if character ==" b ":..."は、if "b" in line:... 'に単純化することができます。 – ulidtko

0
#! usr/bin/env python 

#Open the file , i assumed its called somefile.txt 
file = open('somefile.txt.txt','r') 
#Lets loop through the lines ... 
for line in file.readlines(): 
    #test if letter 'b' is in each line ... 
    if 'b' in line: 
     #print that we found a b in the line 
     print "letter b found" 
関連する問題