Python "присоединиться", как Unix "присоединиться" - PullRequest
4 голосов
/ 22 ноября 2010

Мне любопытно, есть ли встроенная функция соединения Python, такая как версия unix (см. http://linux.about.com/library/cmd/blcmdl_join.htm). Я знаю, что функциональность включена через встроенный модуль sqlite3 и, возможно, через некоторые другие модули, такие как pytables.

Извините, если это основной вопрос, но я обнаружил, что поиск "python join" и связанных запросов довольно загрязнен стандартной функцией python join. Кроме того, если бы такой функциональности не было, я не ожидал бы найти такую ​​информацию так легко.

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010

Вот 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
4 голосов
/ 22 ноября 2010

Вы можете легко смоделировать объединение, используя словари:

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 находится на пересечении.)

Я полагаюне знаю встроенного для этого в одном вызове функции.

1 голос
/ 22 ноября 2010

номер

Если вы используете Python в Unix, вы можете выполнить команду извне, используя модуль subprocess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...