Python“加入”函数就像unix“join”

时间:2010-11-22 16:40:02

标签: python join

我很好奇是否有像unix版本一样的内置python连接函数(参见http://linux.about.com/library/cmd/blcmdl_join.htm)。我知道功能是通过内置的sqlite3模块包含的,也可能是通过pytables等其他模块。

很抱歉,如果这是一个基本问题,但我发现搜索“python join”和相关查询受到标准python join函数的严重污染。此外,如果没有这样的功能,我不希望这么容易找到这些信息。

3 个答案:

答案 0 :(得分:6)

这是一个连接函数的python版本,不处理所有潜在的错误情况。但是展示了基本的想法。

# usage join(open('f1.txt'), open('f2.txt'))

def join(fd_a, fd_b) :
    result = []
    la = fd_a.readline()
    lb = fd_b.readline()
    while la and lb :
        start_a, rest_a = la.split(' ', 1)
        start_b, rest_b = lb.split(' ', 1)
        if cmp(start_a, start_b) == 0 :
            result.append([start_a, [rest_a, rest_b]])
            la = fd_a.readline()
            lb = fd_b.readline()
        elif cmp(start_a, start_b) < 0 :
            la = fd_a.readline()
        else :
            lb = fd_b.readline()
    return result

答案 1 :(得分:4)

您可以使用词典轻松模拟联接:

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
print dict((key, (d1[key], d2[key])) for key in d1 if key in d2)
{'b': (2, 3)}

或者,Python 3.x中的最后一行:

print {key: (d1[key], d2[key]) for key in d1.keys() & d2.keys()}
{'b': (2, 3)}

(2.x行也可以在Python 3.x中运行,但是使用&来获取字典键的交集可能会加快速度,如果{{1}只有一小部分键的话在交叉路口。)

我不知道在单个函数调用中执行此操作的内置函数。

答案 2 :(得分:1)

没有

如果您在Unix上运行Python,则可以使用subprocess模块在​​外部运行命令。