检查文本文件是否有另一行Python

2024-10-01 07:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,将文本文件解析为电子表格,在这过程中,我需要通读它们。问题是找出何时停止。Java在阅读时附加了一个名为hasNext()hasNextLine()的方法,我想知道Python中是否有类似的东西?不知为什么我在哪儿都找不到这个。在

例如:

open(f) as file:
    file.readline()
    nextLine = true
    while nextLine:
        file.readline()
        Do stuff
        if not file.hasNextLine():
            nextLine = false

Tags: 方法脚本truereadline过程asjavaopen
3条回答

文件是行上的迭代器。如果您只想检查一个文件是否还有一行,您可以发出line = next(file)并捕捉出现的StopIeration,以防没有其他行。或者,可以将line = next(file, default)与非字符串default值(例如None)一起使用,然后进行检查。在

请注意,在大多数情况下,当文件上的for循环结束时,您就知道完成了,正如其他答案所解释的那样。因此,请确保您确实需要使用next的细粒度控制。在

我用来阅读文本文件的典型节奏是:

with open('myfile.txt', 'r') as myfile:

    lines = myfile.readlines()

for line in lines:

    if 'this' in line: #Your criteria here to skip lines
        continue

    #Do something here

使用with只会使文件保持打开状态,直到您执行完它所在块中的所有代码,然后该文件将被关闭。我还认为在这里突出显示readlines()方法很有价值,它读取文件中的所有行并将它们存储在一个列表中。关于处理换行符(\n)字符,我将向您指出@Joe Iddon的答案。在

只需使用for循环遍历file对象:

for line in file:
    #do stuff..

注意,这包括每个line字符串末尾的新行字符(\n)。可以通过以下任一方法移除:

^{pr2}$

或者:

for line in (l[:-1] for l in file):
    #do stuff...

您只能通过读取文件来检查文件是否有另一行(尽管您可以使用file.tell来检查是否在文件的末尾而不进行任何读取)。在

这可以通过调用file.readline并检查字符串是否为空或调用next的{a1}并捕获{}异常来完成。在

为了准确回答您的问题,您可以检查文件是否有另一行:

next_line = file.readline():
if next_line:
    #has next line, do whatever...

或者,在不修改当前文件指针的情况下:

def has_another_line(file):
    cur_pos = file.tell()
    does_it = bool(file.readline())
    file.seek(cur_pos)
    return does_it

它将文件指针重置回其原始状态。在

例如

$ printf "hello\nthere\nwhat\nis\nup\n" > f.txt
$ python -q
>>> f = open('f.txt')
>>> def has_another_line(file):
...     cur_pos = file.tell()
...     does_it = bool(file.readline())
...     file.seek(cur_pos)
...     return does_it
... 
>>> has_another_line(f)
True
>>> f.readline()
'hello\n'

相关问题 更多 >