【问题标题】:How to change back a line during file read如何在文件读取期间改回一行
【发布时间】:2011-02-04 17:24:18
【问题描述】:

在我的代码中,我有一个这样的行长打印:

line = file.readline()
print("length = ", len(line))

之后我开始扫描这些行:

for i in range(len(line)):
        if(file.read(1) == 'b'):
            print("letter 'b' found.")

问题是for 循环从文件的第 2 行开始读取。 如何在不关闭并重新打开文件的情况下使其从第 1 行开始读取?

【问题讨论】:

    标签: python io line


    【解决方案1】:

    可以使用file.seek 来移动下一次读取的位置,但效率低下。您已经阅读了该行,因此您可以处理 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: 
        ...
    

    【讨论】:

    • @Dieseltjuh:如果您需要以特殊方式处理第一行,请使用readline,专门处理第一行,然后遍历文件的其余部分。如果您想以相同的方式处理所有行,请不要使用readline。我希望这有助于澄清。
    • 除了readline,您可以使用line = next(f)(或f.next(),具体取决于Python版本)。
    【解决方案2】:

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

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

    【讨论】:

    • 这不是经过深思熟虑的。您可以使用next 单独处理第一行,而不是在每次迭代中测试和递增lineno。另外,file 是 Python 内置的,请勿将其用作变量名。
    • @Seth next 方式会在第一行跳过'b'。这个问题很不清楚,我的回答是猜测:OP 需要特别对待第一行,打印它的长度,同时检查 whole file 是否包含字母'b'。
    【解决方案3】:

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

    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' in string 做到了。
    • @ulidtko:我不是要搜索它,而是要计算出现次数。 'b' in stringbbbbbb 提供Truesum(char == "b" for char in line) 提供6
    • 我说的是第一个代码sn-p。 for character in line: if character == "b": ... 可以简化为if "b" in line: ...
    • @ulidtko:好的,但是在那里,它将每行打印一次“找到字母'b'”,而不是每行(b 的数量)时间,这是 OP 代码所要求的。
    【解决方案4】:
    #! 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多