Лучший способ получить только строки, целые числа и / или с плавающей точкой из файла данных в Python? - PullRequest
0 голосов
/ 15 ноября 2018

Например:

Мой вклад:

Input:
zxxxxyzzxyxyxyzxzzxzzzyzzxxxzxxyyyzxyxzyxyxyzyyyyzzyyyyzzxzxzyzzzzyxzxxxyxxxxyyzyyzyyyxzzzzyzxyzzyyy
--------
x y z
--------
A B
--------
    A   B
A   0.634   0.366   
B   0.387   0.613   
--------
    x   y   z
A   0.532   0.226   0.241   
B   0.457   0.192   0.351


Output:
AAAAAAAAAAAAAABBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBAAA

Прямо сейчас я использую это:

import sys, re

data = []
for line in sys.stdin.readlines():
    data.append(''.join(line.strip().split()))

cleanup = []
for i in range(len(data)):
    cleanup.append(re.sub(r"\S+", " ", data[i]))

print(data)

и мой вывод выглядит так:

['zxxxxyzzxyxyxyzxzzxzzzyzzxxxzxxyyyzxyxzyxyxyzyyyyzzyyyyzzxzxzyzzzzyxzxxxyxxxxyyzyyzyyyxzzzzyzxyzzyyy', '--------', 'xyz', '--------', 'AB', '--------', 'AB', 'A0.6340.366', 'B0.3870.613', '--------', 'xyz', 'A0.5320.2260.241', 'B0.4570.1920.351']

Но я хочу, чтобы мой список данных выглядел так:

print(data)
['zxxxxyzzxyxyxyzxzzxzzzyzzxxxzxxyyyzxyxzyxyxyzyyyyzzyyyyzzxzxzyzzzzyxzxxxyxxxxyyzyyzyyyxzzzzyzxyzzyyy', 'x', 'y', 'z', 'A', 'B', '0.634', '0.366', '0.387', '0.613', '0.532', '0.226', '0.241', '0.457', '0.192', '0.351']

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы почти правы. Вам просто не нужно присоединяться к результату split(). Вместо этого добавьте список data с каждым элементом из split()

import sys, re

data = []
for line in sys.stdin.readlines():
    for x in re.sub(r"[^a-zA-Z\d\s\.]", "", line).strip().split():
        data.append(x)

print(data)
0 голосов
/ 15 ноября 2018

Вы могли бы сделать это так ...

rawLines = raw.split("\n")

data = {}
data["seq"] = rawLines[1]

data["mat1"] = {}
for k in [8,9]:
    temp = rawLines[k].split("\t")
    if(k==8):
        data["mat1"]["A"] = {"A":float(temp[1]),"B":float(temp[2])}
    else:
        data["mat1"]["B"] = {"A":float(temp[1]),"B":float(temp[2])}

data["mat2"] = {}
for k in [14,15]:
    temp = rawLines[k].split("\t")
    if(k == 14):
        data["mat2"]["A"]={"X":float(temp[1]),"Y":float(temp[2]),"Z":float(temp[3])}
    elif(k == 15):
        data["mat2"]["B"]={"X":float(temp[1]),"Y":float(temp[2]),"Z":float(temp[3])}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...