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

0 投票
3 回答
5608 浏览
提问于 2025-04-18 13:17

我的程序需要解析不同类型的日志文件,其中一些文件在开头有空行。获取文件的第一行内容对这个程序来说非常重要。我已经找到了跳过空行的方法,但还没能让程序把第一行有内容的行当作真正的第一行。我的代码如下:

 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

如果你正在解析一个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) '.' );
4
lines = filter(None, (line.rstrip() for line in open(logfile)))

这段代码会给你一个文件中所有非空行的列表。

更新:

如果你的内存有限,可以使用 itertools.ifilter,这个方法会返回一个生成器,而不是一个列表——这是 CristianCiupit 提出的建议。

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() 永远不会返回的值开始。这保证了我们不会离开,直到它成功。

撰写回答