2010-05-05 5 views
0

У нас есть файл Excel с листом, содержащий записи людей.Excel Regex или экспорт в Python? ; «Vlookup» в Python?

1. Номер телефона санитария

Одно из полей является полем номер телефона, который содержит номера телефонов в формате, например:

+XX(Y)ZZZZ-ZZZZ 

(где X, Y и Z являются целыми числами).

Есть также некоторые записи, которые имеют меньше цифр, например:

+XX(Y)ZZZ-ZZZZ 

И другие с действительно зажмурил форматы:

+XX(Y)ZZZZ-ZZZZ/ZZZZ 

или:

ZZZZZZZZ 

Мы должны дезактивировать все эти данные в формате:

0YZZZZZZZZ (or OYZZZZZZ with those with less digits). 

2. Залейте супервизора Детали

Каждый человек имеет супервизора, учитывая как числовой идентификатор. Нам нужно выполнить поиск, чтобы получить имя и адрес электронной почты этого супервизора и добавить его в строку.

Этот поиск будет в первую очередь на том же листе (то есть поиск самого себя), и он может затем Откат к другой книге с большим количеством людей.

3. Подход?

Для первой проблемы я решил каким-то образом использовать регулярное выражение в Excel/VBA, чтобы выполнить синтаксический анализ. Мой Excel-fu не самый лучший, но я полагаю, что могу научиться ... lol. Какие-то конкретные точки на этом?

Однако, я был бы лучше экспортировать XLS в CSV (например, с использованием xlrd), затем с помощью Python, чтобы исправить телефонные номера?

Для второго подхода я думал просто использовать vlookups в Excel, вытащить данные и, как-то, провалиться, сначала на поиск себя, затем на внешнюю книгу, а затем просто вставить текст ошибки , Не знаете, как сделать эту последнюю часть.

Однако, если я случаться выбрать для экспорта в CSV и сделать это в Python, что эффективный способ сделать ВПР? (Должен ли я конвертировать в Словаре, или просто перебирать? Или есть лучше, или более идиоматических способ?)

Приветствия, Victor

+1

Ваше проблемное пространство довольно велико, лучше спросить несколько вопросов с более прямыми вопросами, чтобы мы могли вам помочь. Многие из этих решений могут быть сделаны по вашим предпочтениям. – dlamotte

+0

@xyld: Хмм, я должен удалить этот вопрос и разделить его на два вопроса? Это как раз тот подход, который я выбираю (Python против Excel/VBA), в идеале он сможет обрабатывать оба. Спасибо, Виктор – victorhooi

+0

Не навреди, если оставить его открытым, но, возможно, отредактируйте конкретные вопросы, которые у вас есть о конкретном подходе. – dlamotte

ответ

2

В общем, избегайте формул Excel; используйте xlrd для извлечения необходимых данных, а затем забудьте, что он пришел из Excel и манипулирует данными с помощью Python. Например. обращаясь к вопросу xlrd/vlookup: лучшим способом было бы создать словарь ONCE из соответствующих частей 2 столбцов, содержащих ключи и значения.

Использование xlrd для экспорта в CSV, а затем его чтение является пустой тратой времени И теряет ценную информацию (например, какой фактический тип данных в ячейке Excel). Если бы ваши данные были в базе данных, вы экспортировали бы его в CSV и прочитали бы его обратно?

0

Если вы идете маршрут VBA, он может заплатить, чтобы посмотреть на Tushar Mehta's documentation. Если вы пройдете маршрут Python, вы можете попробовать разбор в CSV или, наоборот, просто манипулировать вещами в памяти и писать через XLWT (что было бы моей предпочтительной техникой). Вы также можете рассмотреть возможность простого изменения данных Excel напрямую с помощью COM-вызовов на основе чего-то вроде this. Наконец, если вы намерены делать это за пределами Excel, вы можете взглянуть на Jython и Apache POI.Не самое легкое решение, но POI - это самая полнофункциональная библиотека, о которой я знаю, которая не зависит от работы в Windows.

Как и другие наблюдатели в комментариях, трудно быть конкретным с таким широким вопросом. Надеюсь, что-то здесь поможет вам начать ...

+0

Я уже посмотрел документацию Тушара Мехты (http://www.tmehta.com/regexp/), перед которой действительно красиво написано. Тем не менее, я застрял в том, как на самом деле извлекать мои подгруппы - я могу использовать RegExpFind, чтобы найти определенное одно выражение регулярного выражения, однако я не уверен, как найти несколько групп выражений и объединить их все вместе, или даже как указать, какую часть найденного выражения я действительно хочу использовать. E.g. кто-нибудь знает VBA, чтобы преобразовать вышеуказанный номер телефона +61 (2) 4534-5453 в полученный результат 0245325453. – victorhooi

+0

Если мы спустимся по маршруту Python, я, вероятно, буду использовать xlrd. Итак, я прочитал это в словаре, а затем сделаю поиск по этому поводу? Или есть более быстрый способ сделать equavilent vlookup в xlrd - как в, искать определенную строку, а затем вытащить определенные столбцы из этой строки (я знаю, что вы можете писать формулы Excel, используя xlwt, однако я бы скорее, более путинский, если он есть?) – victorhooi

Смежные вопросы