使用readline在python中读取文件时跳过空行

使用readline在python中读取文件时跳过空行,python,parsing,python-2.7,readline,Python,Parsing,Python 2.7,Readline,我的程序解析不同类型的日志文件,其中一些文件的开头有空行。在本程序中,为第一行获取变量非常重要。我已经知道如何让它跳过空白行,但是我还没能用文本作为真正的第一行来对待第一行。我的代码如下 在这之后,我需要一个else语句,使第一行=文件的第二行。 谢谢 编辑: 我正在阅读的文件的前几行是 这将为您提供文件中所有非空行的列表 更新: 如果您有内存限制,那么您可以使用返回生成器而不是列表的 这将为您提供文件中所有非空行的列表 更新: 如果你有内存限制,那么你可以使用它返回一个生成器,而不是列表-

我的程序解析不同类型的日志文件,其中一些文件的开头有空行。在本程序中,为第一行获取变量非常重要。我已经知道如何让它跳过空白行,但是我还没能用文本作为真正的第一行来对待第一行。我的代码如下

在这之后,我需要一个else语句,使第一行=文件的第二行。 谢谢

编辑:

我正在阅读的文件的前几行是

这将为您提供文件中所有非空行的列表

更新:

如果您有内存限制,那么您可以使用返回生成器而不是列表的

这将为您提供文件中所有非空行的列表

更新:


如果你有内存限制,那么你可以使用它返回一个生成器,而不是列表-Anish Shah有一个很好的答案,如果你能将文件放入内存中(编辑:现在他对这两种情况都有很好的答案)。如果不能,您可以尝试
while
循环以保持循环,直到找到第一行并分配
第一次

first_time = None
while first_time is None:
  first_line = file.readline()
  if first_line.find('Chain') != -1:
     first_time = int(searchforfirsttime.group(2))
我假设您正在使用
readline()
获取第一行


这是我喜欢Python的一点,就是动态类型
first\u time
可以是任何东西,所以我们可以从一个
int()
永远不会返回的值开始。这保证了我们不会离开,直到它工作。

如果你能把你的文件放在内存中,Anish Shah有一个很好的答案(编辑:现在他对这两种情况都有一个很好的答案)。如果不能,您可以尝试
while
循环以保持循环,直到找到第一行并分配
第一次

first_time = None
while first_time is None:
  first_line = file.readline()
  if first_line.find('Chain') != -1:
     first_time = int(searchforfirsttime.group(2))
我假设您正在使用
readline()
获取第一行


这是我喜欢Python的一点,就是动态类型
first\u time
可以是任何东西,所以我们可以从一个
int()
永远不会返回的值开始。这保证了我们在它工作之前不会离开。

如果您正在解析ASCII文本文件,您应该能够执行以下操作:

LogFilePathNameString = '/path/to/log/file/LogFileName.log';

FirstLineString = '';
FirstLineIndex = 0;

with open( LogFilePathNameString, 'r' ) as LogFileObject:

    LogFileObjectLineStringsList = LogFileObject.readlines();

    NumFileLines = len( LogFileObjectLineStringsList );

    for i in range( 0, NumFileLines, 1 ):

        CurrentLineString = LogFileObjectLineStringsList[ i ];

        if ( CurrentLine != '\n' ):

           FirstLineString = CurrentLineString;
           FirstLineIndex = i;
           break;

        #fi

    #rof

#hitw

print ( 'Found ' + str(FirstLineString) + ' on Line ' + str(FirstLineIndex) '.' );

如果要分析ASCII文本文件,应能够执行以下操作:

LogFilePathNameString = '/path/to/log/file/LogFileName.log';

FirstLineString = '';
FirstLineIndex = 0;

with open( LogFilePathNameString, 'r' ) as LogFileObject:

    LogFileObjectLineStringsList = LogFileObject.readlines();

    NumFileLines = len( LogFileObjectLineStringsList );

    for i in range( 0, NumFileLines, 1 ):

        CurrentLineString = LogFileObjectLineStringsList[ i ];

        if ( CurrentLine != '\n' ):

           FirstLineString = CurrentLineString;
           FirstLineIndex = i;
           break;

        #fi

    #rof

#hitw

print ( 'Found ' + str(FirstLineString) + ' on Line ' + str(FirstLineIndex) '.' );


你能告诉我们文件的前几行吗?你是如何获得第一行的?我认为大多数情况下,完全相同的代码位将用于获取第二个链接并将其放入
第一行
。与主要问题无关,我建议将
替换为if first\u line.find('Chain')!=-1: >代码>第一行中的“链”:你想跳过第一行或所有空白行,包括中间的还是在文件的末尾?你能给我们文件的前几行吗?你是如何获得第一行的?我认为大多数情况下,完全相同的代码位将用于获取第二个链接并将其放入
第一行
。与主要问题无关,我建议将
替换为if first\u line.find('Chain')!=-1: >代码>第一行中的“链”:你想跳过第一行或所有空行,包括文件中间或文件末尾的空白行吗?也就是说,使代码更具Pythic和兼容。删除一些空白行和块< < /Cord>注释的<代码>不会有任何伤害。也就是说,使代码更具Pythonic和兼容性。为了停止抱怨内存使用情况,添加基于生成器的解决方案不会有什么坏处,例如使用或生成器理解的解决方案。@CristianCiupitu是的!哈哈。我只是想在我的回答中加上这一点。我以前没有考虑过记忆。谢谢@但是我喜欢抱怨内存的使用。。。无论如何,创建一个非空行生成器可能是最好的解决方案。您可以直接将其插入到现有代码中,而几乎不改变代码的其他部分。@TheSoundDefense,complaints使我们得以改进:-)这是可行的,但从我的情况来看,SoundDefense有更好的解决方案。为了停止抱怨内存使用,添加基于生成器的解决方案不会有什么坏处,例如,使用或使用发电机的人。@CristianCiupitu是的!哈哈。我只是想在我的回答中加上这一点。我以前没有考虑过记忆。谢谢@但是我喜欢抱怨内存的使用。。。无论如何,创建一个非空行生成器可能是最好的解决方案。您可以直接将其插入到现有代码中,而几乎不改变代码的其他部分。@TheSoundDefense,complaints使我们改进:-)这是可行的,但从我的情况来看,SoundDefense有更好的解决方案。现在是我吹毛求疵的时候了:-)政治公众人物8说“应该始终使用
is
is not
,永远不要使用相等运算符来比较像None这样的单例。因此,用
first\u time==None
替换
first\u time is None
@CristianCiupitu,这是一个相当挑剔的问题。答案已经改变。现在是我挑剔的时候了:-)PEP 8中的人这样说”应该始终使用
is
is not
,永远不要使用相等运算符来比较像None这样的单例。因此,用
first\u time==None
替换
first\u time is None
@CristianCiupitu,这是一个相当挑剔的问题。答案已更改。
LogFilePathNameString = '/path/to/log/file/LogFileName.log';

FirstLineString = '';
FirstLineIndex = 0;

with open( LogFilePathNameString, 'r' ) as LogFileObject:

    LogFileObjectLineStringsList = LogFileObject.readlines();

    NumFileLines = len( LogFileObjectLineStringsList );

    for i in range( 0, NumFileLines, 1 ):

        CurrentLineString = LogFileObjectLineStringsList[ i ];

        if ( CurrentLine != '\n' ):

           FirstLineString = CurrentLineString;
           FirstLineIndex = i;
           break;

        #fi

    #rof

#hitw

print ( 'Found ' + str(FirstLineString) + ' on Line ' + str(FirstLineIndex) '.' );