python 文本格式化_使用python格式化文本

如何使用Python将以下输入转换为制表符分隔的文件?

输入值

[ 49 302 515 691 909] {'prominences': array([1.495, 1.565, 1.655, 2.3, 1.88 ]), 'left_bases': array([ 8, 122, 122, 122, 122]), 'right_bases': array([122, 312, 536, 764, 932]), 'widths': array([36.93773946, 7.14150718, 7.38614341, 39.32723577, 8.17883298]), 'width_heights': array([-0.4975, -0.2275, -0.0875, -0.325 , 0.1 ]), 'left_ips': array([ 34.52777778, 298.15454545, 510.59302326, 673.91666667,904.25490196]), 'right_ips': array([ 71.46551724, 305.29605263, 517.97916667, 713.24390244,912.43373494])}

输出

006b5173507bf70ae3b930d68d116c36.png

解决方案

这或多或少是可怕的,并且会因意外输入而中断,但是碰巧可以处理您拥有的数据。确实,但是,正如我在评论中所述,让数据来自程序变得更聪明!

编辑:如果你的“输入”,实际上是一个输出print(a, b)语句你自己的程序,那么你可以跳过下面的可怕的解析,并替换这两个值的numbers和data。

import re

import ast

import csv

import sys

def parse_horrible_data_string(s):

numbers_string, data_string = re.match(r"^\[(.+?)\] (.+)$", s).groups()

numbers = [int(n) for n in numbers_string.strip().split()]

data = ast.literal_eval(data_string.replace(": array(", ": ("))

return (numbers, data)

s = """[ 49 302 515 691 909] {'prominences': array([1.495, 1.565, 1.655, 2.3, 1.88 ]), 'left_bases': array([ 8, 122, 122, 122, 122]), 'right_bases': array([122, 312, 536, 764, 932]), 'widths': array([36.93773946, 7.14150718, 7.38614341, 39.32723577, 8.17883298]), 'width_heights': array([-0.4975, -0.2275, -0.0875, -0.325 , 0.1 ]), 'left_ips': array([ 34.52777778, 298.15454545, 510.59302326, 673.91666667,904.25490196]), 'right_ips': array([ 71.46551724, 305.29605263, 517.97916667, 713.24390244,912.43373494])}"""

numbers, data = parse_horrible_data_string(s)

data_keys = list(data.keys())

writer = csv.writer(sys.stdout)

writer.writerow(["No"] + data_keys)

for i, number in enumerate(numbers):

row = [number] + [data[key][i] for key in data_keys]

writer.writerow(row)

输出

No,prominences,left_bases,right_bases,widths,width_heights,left_ips,right_ips

49,1.495,8,122,36.93773946,-0.4975,34.52777778,71.46551724

302,1.565,122,312,7.14150718,-0.2275,298.15454545,305.29605263

515,1.655,122,536,7.38614341,-0.0875,510.59302326,517.97916667

691,2.3,122,764,39.32723577,-0.325,673.91666667,713.24390244

909,1.88,122,932,8.17883298,0.1,904.25490196,912.43373494

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值