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

时间:2014-07-14 18:34:56

标签: python parsing python-2.7 readline

我的程序解析不同类型的日志文件,其中一些在文件开头有空行。获取第一行的变量在此程序中非常重要。我已经想出如何让它跳过空白行,但我无法让它将第一行视为真正的第一行。我的代码如下

 if first_line.find('Chain') != -1:
    first_time = int(searchforfirsttime.group(2)

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

编辑:

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

(Blank Line)
CODE: 30;  Chain 1;  Time = 92473622;   PASSIVE:; 127; 127; 127; 127;   ACTIVE:; 127; 127; 127; 127; 127; 127; 127; 127; 127; 127;   CAPS:; 0; 0; 0; 0; 0; 0; 0; 0; 0;   DELAYS:;   0; 0; 0; 0;
CODE:31;  Chain1:;  Time = 92473765;  DCInputPower = -28.587273; DCOutputPower = -23.745722; DCCoeffs:  I:0; Q:0I:0; Q:0I:0; Q:0I:0;

3 个答案:

答案 0 :(得分:4)

lines = filter(None, (line.rstrip() for line in open(logfile)))

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

<强>更新

如果你有内存约束,那么你可以使用itertools.ifilter返回生成器而不是列表 - 由CristianCiupit建议

答案 1 :(得分:2)

Anish Shah有一个很好的答案如果你能把你的档案放在记忆中(编辑:现在他对这两种情况都有很好的答案)。如果你不能,你总是可以尝试while循环来保持循环,直到找到第一行并指定first_time

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_time可以是任何东西,真的,所以我们可以从int()永远不会返回的值开始。这保证了我们不会离开直到它发挥作用。

答案 2 :(得分:0)

如果要解析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) '.' );