Python中的"join"函数类似于Unix中的"join

4 投票
3 回答
2916 浏览
提问于 2025-04-16 07:27

我很好奇,Python 有没有像 Unix 那样的内置 join 函数(可以参考这个链接 https://www.man7.org/linux/man-pages/man1/join.1.html)。我知道通过内置的 sqlite3 模块可以实现这个功能,可能还有其他一些模块,比如 pytables 也可以。

抱歉如果这个问题太基础,但我发现搜索“python join”以及相关的内容时,结果大多都是标准的 Python join 函数的信息。如果没有这样的功能,我也不指望能那么容易找到相关的信息。

3 个回答

1

不可以。

如果你在Unix系统上运行Python,可以使用subprocess模块来在外部执行命令。

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中也能用,但如果只有很小一部分的d1的键在交集中,使用&来获取字典键的交集可能会让速度更快。)

我不知道有没有内置的函数可以一次性完成这个操作。

6

这是一个用Python写的join函数的版本,它没有处理所有可能出现的错误情况。不过,它展示了基本的思路。

# 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

撰写回答