使用readline在Python读取文件时跳过空行
我的程序需要解析不同类型的日志文件,其中一些文件在开头有空行。获取文件的第一行内容对这个程序来说非常重要。我已经找到了跳过空行的方法,但还没能让程序把第一行有内容的行当作真正的第一行。我的代码如下:
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()
永远不会返回的值开始。这保证了我们不会离开,直到它成功。