Python 如何在文件读取期间更改回一行

Python 如何在文件读取期间更改回一行,python,io,line,Python,Io,Line,在我的代码中,有一行长度打印,如下所示: line = file.readline() print("length = ", len(line)) with open('file.txt', 'r') as f: for line in f: for character in line: if character == "b": print "letter 'b' found." 之后,我开始通过执行以下操作扫描

在我的代码中,有一行长度打印,如下所示:

line = file.readline()
print("length = ", len(line))
with open('file.txt', 'r') as f:
    for line in f:
        for character in line:
            if character == "b":
                print "letter 'b' found."
之后,我开始通过执行以下操作扫描行:

for i in range(len(line)):
        if(file.read(1) == 'b'):
            print("letter 'b' found.")
问题是
for
循环开始读取文件的第2行。
如何使其在不关闭并重新打开文件的情况下从第1行开始读取?

可以使用
文件。seek
移动下一次读取的位置,但这是低效的。您已经阅读了行中的内容,因此您可以只处理
无需再次阅读

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: 
    ...

看来你需要特别处理第一行

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.")

听起来你想要这样的东西:

line = file.readline()
print("length = ", len(line))
with open('file.txt', 'r') as f:
    for line in f:
        for character in line:
            if character == "b":
                print "letter 'b' found."
或者,如果您只需要号码:

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

搜索字符时不需要循环整个字符串<代码>'b'在字符串中执行。@ulidtko:我不想搜索它,我想计算出现的次数<代码>字符串中的“b”给出了
True
对于
bbbbbb
sum(char==“b”表示行中的char)
给出了
6
。我刚才说的是第一个代码段<代码>对于第行中的字符:如果字符==“b”:…可以简化为
如果第行中的“b”:…
@ulidtko:好的,但是在这里,它会每行打印一次“字母“b”而不是每行的(b的数量)时间,这是OP的代码要求的。@Dieseltjuh:如果您需要以特殊方式处理第一行,使用
readline
,专门处理第一行,然后循环文件的其余部分。如果希望以相同的方式处理所有行,则不要使用
readline
。我希望这有助于澄清问题。您可以执行
line=next(f)
(或
f.next()
,而不是
readline
,具体取决于Python版本)。这并不是经过深思熟虑的。您可以使用
next
单独处理第一行,而不是在每次迭代中测试和递增
lineno
。另外,
file
是Python的内置文件,不要将其用作变量名。@Seth下一个
方法将跳过第一行中的“b”。这个问题很不清楚,我的回答是猜测:OP需要特别处理第一行,打印它的长度,同时检查整个文件是否包含字母“b”。