Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析平面文件中的数据_Python - Fatal编程技术网

Python 解析平面文件中的数据

Python 解析平面文件中的数据,python,Python,我试图从平面文件中读取一些数据,并使用Python将其显示在其他应用程序上。我的平面文件有12000行,我不需要所有的数据。我需要解析出一些数据。我的平面文件上有12000行。一块行中除其他数据外还有00,另一块行中除其他数据外还有10。我要做的是解析出其中包含10的所有行,并且只包括那些包含00的行 下面是更新的示例文件。我想用10来解析所有的行。此外,它只是一个样本,我的实际平面文件是12000行 我刚更新了我的平面文件。在这里,我只想读一行,开头是$,后面是LOB,结尾是00,在&。我想解

我试图从平面文件中读取一些数据,并使用Python将其显示在其他应用程序上。我的平面文件有12000行,我不需要所有的数据。我需要解析出一些数据。我的平面文件上有12000行。一块行中除其他数据外还有00,另一块行中除其他数据外还有10。我要做的是解析出其中包含10的所有行,并且只包括那些包含00的行

下面是更新的示例文件。我想用10来解析所有的行。此外,它只是一个样本,我的实际平面文件是12000行

我刚更新了我的平面文件。在这里,我只想读一行,开头是$,后面是LOB,结尾是00,在&。我想解析平面文件中的所有其他内容

$90TM020516 19002200&
$90LOB  0   0   0   7 10  &
$90LOB 25   0   0   6 10  &
$90LOB 57   0   0   6 10  &
$90LOB353   0   0   5 10  &
$90LOB 36   0   0   5 10  &
$90GPSA8   0   38281168  -77448376&
$90LOB276   0   0   5 10  &
$90LOB185   0   0   6 10  &
$90LOB197   0   0   6 00  &
$90LOB198   0 254   6 00  &
$90LOB197   0 254   6 00  &
RSSI $90LOB201   0 254   5 00  &
$90TM020516 19002300&
$90LOB194   0 254   5 00  &
$90LOB190   0 254   5 00  &
$90LOB185   0 254   5 00  &
$90LOB181   0 254   5 00  &
$90LOB187   0 254   5 00  &
$90LOB192   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB191   0 254   5 00  &
$90LOB184   0 254   5 00  &
$90LOB177   0 254   5 00  &
下面是我用来读取数据的代码

  for line in lines:
        if (line[0] == '$'):
         if (line[3:6] == 'LOB'):
            if (line[22:24]=='00'):

如果你愿意,我可以把整个平面文件寄给你。这只是文件的摘录

如果我正确理解了您的问题(我不确定我是否理解),您的文件中的行如下所示:

@45   0 0   5 10  *
@45   0 0   5 10  *
@45   0 0   5 10  *
@45   0 0   6 10  *
@45   0 0   6 00  *
@45   0 0   6 00  *
@45   0 0   6 00  *
@45   0 0   5 00  *
。。。你只想读有00的行,忽略有10的行

下面是实现这一点的代码示例:

# List containing all the lines you want to save
lines_you_want = []

# Open the file with 12,000 lines
with open('some.file', 'rb') as infile:

    # Check if each line starts with 00
    for line in infile:

        #  Check if the 15th character is a '0' instead of a '1'
        if (line[15] == '0'):
            lines_you_want.append(line)

# Do something with lines_you_want
这假设00或10在文件中始终处于同一位置(字符15和16),并且这两个是唯一可能存在的内容(即不是01、11、12、29或其他内容),否则您必须更改此设置

根据应用程序的不同,您也可以在运行时使用这些行来代替创建列表。两种方法都有效

如果我有一个错误的假设,请评论,我会编辑我的答案

import re
filename = <path to file>
lines = [line.strip() for line in open(filename) if re.match(r'^\$.*LOB.*00  &$', line)]
这将产生:

$90LOB197   0   0   6 00  &
$90LOB198   0 254   6 00  &
$90LOB197   0 254   6 00  &
$90LOB194   0 254   5 00  &
$90LOB190   0 254   5 00  &
$90LOB185   0 254   5 00  &
$90LOB181   0 254   5 00  &
$90LOB187   0 254   5 00  &
$90LOB192   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB191   0 254   5 00  &
$90LOB184   0 254   5 00  &
$90LOB177   0 254   5 00  &

从您的示例数据中。

如果您想查看代码,可以在上完成,否则请说明您的问题。我喜欢您的名字作为初学者。因此,请发布一个您试图解析的文件示例,其中包含一个您希望保留的行的示例和一个您希望忽略的行的示例。第二,发布您为此任务编写的代码会很好。唯一的方法是在该行不包含至少16个字符的情况下。这可能吗?亲爱的Byrce,我已经更新了我的帖子,看一看,并相应地更新你的答案。
$90LOB197   0   0   6 00  &
$90LOB198   0 254   6 00  &
$90LOB197   0 254   6 00  &
$90LOB194   0 254   5 00  &
$90LOB190   0 254   5 00  &
$90LOB185   0 254   5 00  &
$90LOB181   0 254   5 00  &
$90LOB187   0 254   5 00  &
$90LOB192   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB195   0 254   5 00  &
$90LOB191   0 254   5 00  &
$90LOB184   0 254   5 00  &
$90LOB177   0 254   5 00  &