Почему бы не сделать это?
def filt_spec(df, col, val, op):
import operator
ops = {'eq': operator.eq, 'neq': operator.ne, 'gt': operator.gt, 'ge': operator.ge, 'lt': operator.lt, 'le': operator.le}
return df[ops[op](df[col], val)]
pandas.DataFrame.filt_spec = filt_spec
Демонстрация:
df = pd.DataFrame({'a': [1,2,3,4,5], 'b':[5,4,3,2,1]})
df.filt_spec('a', 2, 'ge')
Результат:
a b
1 2 4
2 3 3
3 4 2
4 5 1
Вы можете видеть, что столбец 'a' был отфильтрован, где a> = 2.
Это немного быстрее (время ввода, а не производительность), чем цепочка операторов. Конечно, вы могли бы поставить импорт в верхнюю часть файла.
Вероятно, самый простой способ достигнуть этого с git archive
. При реальной необходимости просто в расширенном дереве, можно сделать что-то вроде этого.
git archive master | tar -x -C /somewhere/else
Большую часть времени, что я должен 'экспортировать' что-то от мерзавца, я хочу сжатый архив в любом случае, таким образом, я делаю что-то вроде этого.
git archive master | bzip2 >source-tree.tar.bz2
архив ZIP:
git archive --format zip --output /full/path/to/zipfile.zip master
git help archive
для получения дополнительной информации, это довольно гибко.
знать, что даже при том, что архив не будет содержать .git каталог, он будет, однако, содержать другие скрытые определенные для мерзавца файлы как .gitignore, .gitattributes, и т.д. Если Вы не захотите их в архиве, удостоверьтесь, что Вы используете экспорт - игнорируют атрибут в .gitattributes файле и фиксируют это прежде, чем сделать Ваш архив. Read больше...
<час>Примечание: Если Вы интересуетесь экспортом индекса, команда
git checkout-index -a -f --prefix=/destination/path/
(См. ответ Greg для получения дополнительной информации)
Я записал простую обертку [приблизительно 111], что можно использовать как это:
git export ~/the/destination/dir
, Если целевой каталог уже существует, необходимо будет добавить -f
или --force
.
Установка проста; просто отбросьте сценарий где-нибудь в Вашем PATH
и удостоверьтесь, что это - исполняемый файл.
От Руководство Мерзавца:
Используя индекс контроля мерзавца для "экспорта всего дерева"
способность к префиксу в основном делает его тривиальным для использования индекса контроля мерзавца в качестве "экспорта как древовидная" функция. Просто считайте желаемое дерево в индекс и сделайте:
$ git checkout-index --prefix=git-export-dir/ -a
Я узнал то, что означает опция 2. Из репозитория можно сделать:
git checkout-index -a -f --prefix=/destination/path/
наклонная черта в конце пути важна, иначе это приведет к файлам, находящимся в / месте назначения с префиксом 'пути'.
С тех пор в нормальной ситуации индекс содержит содержание репозитория, нет ничего специального, чтобы сделать для "чтения желаемого дерева в индекс". Это уже там.
Эти -a
флаг требуется, чтобы проверять все файлы в индексе (я не уверен, что это означает опускать этот флаг в этой ситуации, так как это не делает то, что я хочу). -f
силы флага, перезаписывающие любые существующие файлы в выводе, который обычно не делает эта команда.
Это, кажется, вид "экспорта мерзавца", я искал.
Мое предпочтение должно было бы на самом деле иметь цель dist в Вашем Make-файле (или другая система сборки), который экспортирует распространяемый архив Вашего кода (.tar.bz2, .zip, .jar, или независимо от того, что является соответствующим). Если Вы, оказывается, используете автоинструменты GNU или системы MakeMaker Perl, я думаю, что это существует для Вас автоматически. В противном случае я настоятельно рекомендую добавление его.
ЭТА (2012-09-06): Ничего себе, резкий downvotes. Я все еще полагаю, что лучше создать Ваши дистрибутивы с Вашими инструментами сборки, а не Вашим инструментом управления исходным кодом. Я верю в создание артефактов с инструментами сборки. В моем текущем задании наш основной продукт создается с целевым объектом Ant. Мы посреди переключения систем управления исходным кодом, и присутствие этого целевого объекта Ant означает тот меньше стычки в миграции.
git archive
также работы с удаленным репозиторием.
git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -
Для экспорта конкретного пути в repo добавляют столько путей, сколько Вы желаете как последний аргумент мерзавцу, например:
git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv
Похоже, это меньшая проблема для Git, чем для SVN. Git помещает только папку .git в корень репозитория, тогда как SVN помещает папку .svn в каждый подкаталог. Таким образом, "svn export" избегает рекурсивной магии командной строки, тогда как с Git рекурсия не требуется.
Мне это было нужно для сценария развертывания, и я не мог использовать ни один из вышеупомянутых подходов. Вместо этого я придумал другое решение:
#!/bin/sh
[ $# -eq 2 ] || echo "USAGE $0 REPOSITORY DESTINATION" && exit 1
REPOSITORY=$1
DESTINATION=$2
TMPNAME="/tmp/$(basename $REPOSITORY).$$"
git clone $REPOSITORY $TMPNAME
rm -rf $TMPNAME/.git
mkdir -p $DESTINATION
cp -r $TMPNAME/* $DESTINATION
rm -rf $TMPNAME
Делаем это простым способом, это функция для .bash_profile, она напрямую распаковывает архив в текущее местоположение, настройте сначала ваш обычный [url:path]. ПРИМЕЧАНИЕ: С помощью этой функции вы избегаете операции клонирования, она получает архив непосредственно из удаленного репозитория.
gitss() {
URL=[url:path]
TMPFILE="`/bin/tempfile`"
if [ "$1" = "" ]; then
echo -e "Use: gitss repo [tree/commit]\n"
return
fi
if [ "$2" = "" ]; then
TREEISH="HEAD"
else
TREEISH="$2"
fi
echo "Getting $1/$TREEISH..."
git archive --format=zip --remote=$URL/$1 $TREEISH > $TMPFILE && unzip $TMPFILE && echo -e "\nDone\n"
rm $TMPFILE
}
Псевдоним для .gitconfig, требуется та же конфигурация (будьте осторожны, выполняя команду внутри .git-проектов, она ВСЕГДА перепрыгивает на базовый каталог ранее как сказано здесь, пока это не исправлено, я лично предпочитаю функцию
ss = !env GIT_TMPFILE="`/bin/tempfile`" sh -c 'git archive --format=zip --remote=[url:path]/$1 $2 \ > $GIT_TMPFILE && unzip $GIT_TMPFILE && rm $GIT_TMPFILE' -
NSUInteger
кunsigned long
, но изменяете его наNSInteger
, Вы получаете неправильное поведение для отрицательных величин без предупреждений.@()
, как гарантируют, будет работать во всех случаях. – ilya n. 3 December 2013 в 22:03