繁体   English   中英

解析熊猫中的非常规文本文件

[英]Parsing a non regular text file in pandas

我正在尝试使用pandas解析一个像这样的文本文件:

Some random text
more random text that may be of different length
JUNK 0 9 8
GOOD 0 1 1
GOOD 5 5 5
more random text interdispersed
GOOD 123 321 2
JUNK 55 1 9
GOOD 1 2 3

该文件以空格分隔。 我只关心以“ GOOD”开头的行,它们的格式都相同。

我相信read_table()是正确的命令,但是我不知道如何过滤它。

我当前解析文件的方法是打开文件,使用正则表达式匹配我关心的行,然后在空格处分割行。 这可能会很慢,我正在寻找更快的清洁方式。

您不需要正则表达式来匹配以“ GOOD”开头的行。 只需遍历文件并丢弃所有其他行,即可创建所需数据的“干净”副本:

with open('irregular.txt') as inFile, open('regular.txt', 'w') as outFile:
    for line in inFile:
        if line.startswith('GOOD'):
            outFile.write(line)

然后,您可以使用带有delim_whitespace=True参数的read_tableread_csv读取“ read_table ”。

让我们生成一个可以过滤好线条的生成器

def generate_good_lines(filename):
    with open(filename) as f:
        if line.startswith('GOOD'):
            yield line

现在,您所需要的只是以所需的方式解析这些行,例如:

def generate_parsed(filename_list):
    for filename in filename_list:
        for line in generate_good_lines(filename)
            data = your_parser_function(line)
            yield data

然后,将所有行都消耗到列表中(例如):

your_list = list(generate_parsed(your_filename_list))

在您的问题中,your_parser_function看起来像这样:

def your_parser_function(line):
    return map(int, line[5:].split()) # split values and convert them to integers

生成器会照顾您的内存和处理器时间消耗

/ 对不起我的英语不好 /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM