用python快速处理数据?

2024-09-28 21:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以下格式的文件:

 [s1,s2,s3,s4,...] SOME_TEXT
 (per line)

例如:

 [dog,cat,monkey] 1,2,3
 [a,b,c,d,e,f] 13,4,6

包括括号。你知道吗

假设我有另一个这样的字段,它包含两行:

 [banana,cat2,monkey2] 1,2,3
 [a2,b2,c2,d,e,f] 13,4,6

我想把这张表格的两个文件按以下方式对齐:

 [dog^banana,cat^cat2,monkey^monkey2] 1,2,3
 [a^a2,b^b2,c^c2,d^d2,e^e2,f^f2] 13,4,6

同时确保相应行(如1、2、3和13、4、6)中的“某些文本”相同,并且每个对应行中括号中的元素数相同。什么是快速紧凑的方法?你知道吗

谢谢。你知道吗


Tags: 文件a2s3格式b2s4catmonkey
3条回答

我会使用正则表达式来切掉第一个]之后的所有内容(并保持不变)。然后另一个正则表达式将字符串分解成数组。然后做任何你需要做的关于合并来自不同文件的不同数组的事情,然后把它们拼接在一起应该不会太难。我将把正则表达式留给读者作为练习:-)

for l, m in zip(f1, f2):
    l_head, l_tail = l.strip("[ ").split("]")
    m_head, m_tail = m.strip("[ ").split("]")

    l_head = l_head.split(",")
    m_head = m_head.split(",")
    assert len(l_head) == len(m_head)

    l_tail = l_tail.split(",")
    m_tail = m_tail.split(",")
    assert len(l_tail) == len(m_tail)

    ...

我没有给你的变量起好名字,因为我不知道它们是什么。我会给他们起个更有用的名字。你知道吗

我还没有编写代码来重新组装这些行。不应该太难。。。你知道吗

def read_file(fp,hash):
    for l in fp:
        p = l[1:].find(']')
        k = l[p+3:-1]
        v = l[1:p+1].split(",")
        if k not in hash:
            hash[k] = v
        else:
            hash[k] = zip(hash[k], v)

hash = {}

for fname in ('f1.txt', 'f2.txt'):
    with open(fname) as fp:
        read_file(fp, hash)

for k,v in hash.items():
    print "[{0}] {1}".format(",".join("^".join(vv) for vv in v), k)

这是一种基本的方法,如果你需要文件中的行按照它们被读取的顺序,你就必须做更多的工作。你知道吗

下面是我得到的结果:

[a^a2,b^b2,c^c2,d^d,e^e,f^f] 13,4,6
[dog^banana,cat^cat2,monkey^monkey2] 1,2,3

编辑:

这还假设每个keyie.13、4、6在一个文件中出现一次。如果它可能出现多次,您必须将hash[k]=zip(hash[k],v)更改为更复杂的值,例如

if k not in hash:
    hash[k] = [[vv] for vv in v]
else:
    for i,vv in enumerate(v):
        hash[k][i].append(vv)

相关问题 更多 >