[英]Parsing structured but non-tabular text into pandas using regular expressions
[英]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_table
或read_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.