【问题标题】:Best way to get just strings, integers, and/or floats from a data file in python?从python中的数据文件中获取字符串、整数和/或浮点数的最佳方法?
【发布时间】:2019-04-18 01:42:07
【问题描述】:

例如:

我的意见:

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']

【问题讨论】:

    标签: python regex python-3.x parsing


    【解决方案1】:

    你几乎是对的。您只需要不加入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)
    

    【讨论】:

    • 这很接近但并不完全正确。 Id' add re.sub(r"[^a-zA-Z\d\s\.]", "", x) 所以这不包括 OP 不想要的非字母数字单词,例如 "--------"
    • 根据您的评论编辑。谢谢!
    【解决方案2】:

    你可以这样做......

    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])}
    

    【讨论】:

      猜你喜欢
      • 2022-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多