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”。