python inp文件_使用Python从具有独特头打印技术的文件中解析头字符串(.inp扩展名)...

本文介绍了一种方法,通过扫描和解析具有独特头部格式的Python .inp文件来创建DataFrame。利用read_fwf函数,但在遇到虚线分隔符时计算列名和列宽。该方法首先抓取头部信息,然后转换头部分隔符以确定列宽,最后读取固定宽度的列数据。
摘要由CSDN通过智能技术生成

由于您的数据不适合read_fwf中的插值,所以您可以自己扫描和解析头。一旦计算出列名和列宽,就可以将列名和列宽传递给read_fwf,文件指针在第一行打开。页眉和数据之间的虚线分隔符是列宽的一个很好的指示器,所以我用它来计算列宽。在import pandas as pd

import re

# write a test file...

open('test.txt', 'w').write("""\

;; Param

;;Node Parameter Time Series Type

;;

80408 FLOW 80408 FLOW

81009 FLOW 81009 FLOW

82309 FLOW 82309 FLOW """)

def make_dataframe(filename):

with open('test.txt') as fp:

# grab header

headers = []

for line in fp:

if not line.startswith(';;-'):

# header line, swap ' ' for ';;' to maintain len

headers.append(' ' + line[2:-1])

else:

break

else:

print("ERROR: Header separator not found")

return None

# end of header, convert ' ' separators to field lengths

field_lens = [len(m)+1 for m in re.findall(r"\-+", ' ' + line[2:-1])]

# flatten multiline column names

start = 0

pd_header = []

for f_len in field_lens:

pd_header.append(' '.join(field.strip()

for field in (h[start:start+f_len] for h in headers)

if field.strip()))

start += f_len

# read fix length columns

df = pd.read_fwf(fp, header=None, names=pd_header, widths=field_lens,

index_col=False)

return df

df = make_dataframe('test.txt')

print(df)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值