Вы можете объединить Counter
с defaultdict
, чтобы сделать это довольно эффективно, когда вы разбили словарь по дате. Итак, сначала разделим по дате:
from collections import Counter, defaultdict
dtd = defaultdict(list)
for date, time in (item.split() for item in dtl):
dtd[date].append(time[:2])
Теперь вы можете легко сосчитать существующие элементы и использовать их для инициализации defaultdict
, который будет возвращать нули за отсутствующие времена:
for key in dtd:
dtd[key] = defaultdict(int, Counter(dtd[key]))
[1113 ] Результат:
defaultdict(list, {
'03/01/19': defaultdict(int, {
'09': 3,
'10': 2,
'11': 1,
'12': 5,
'17': 1,
'21': 1
}),
'05/01/19': defaultdict(int, {'14': 1, '17': 2, '21': 1}),
'06/01/19': defaultdict(int, {'11': 1, '12': 2})
})
Поскольку объекты здесь defaultdict
, вы сможете запрашивать даты и время, которых не было в исходном наборе данных. Вы можете избежать этого, преобразовав результат в обычный dict
, содержащий только те ключи, которые вы хотите после завершения:
hours = ['%02d' % h for h in range(24)]
dtd = {date: {h: d[h] for h in hours} for date, d in dtd}
:
"c:\Program Files\Subversion\bin\svnlook.exe" log -t %2 %1 | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo "Commit Comments are Required" >&2
exit 1
:OK
exit 0
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Для разработчиков.NET, использующих Подрывную деятельность в Windows, Phil Haack отправил приблизительно CaptainHook.
CaptainHook является простой сменной платформой для записи рычагов Подрывной деятельности с помощью.NET
, проект размещается в Source Forge
Я запустил репозиторий рычагов с помощью C#. Мой первый рычаг был для отправки регистрации уведомлений каналу RSS: SubversionRss, я в настоящее время работаю над одной постфиксацией, сцепляется для отправки регистрации уведомлений каналу Twitter.
Источник:
rem Only allow log messages to be changed.
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
Фактический сценарий
rem Make sure that the log message contains some text.
set REPOS=%1
set TXN=%2
"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo Your commit has been blocked because you didn't provide a log message 1>&2
echo Please write a log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
:OK
rem Check if comment is in list of reserved words to not be used..
"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment
setlocal enabledelayedexpansion
Set SEPARATOR=
set COMMENT=
for /f "delims=" %%a in (comment) do (
set currentline=%%a
set COMMENT=!COMMENT!%SEPARATOR%!currentline!
)
FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null
If %ERRORLEVEL% EQU 1 goto OK2
:Fail
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2
echo Line is -%COMMENT%- 1>&2
echo Please write a proper log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
:OK2
rem Check that the author of this commit has the rights to perform
rem the commit on the files and directories being modified.
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
rem All checks passed, so allow the commit.
exit 0
Пример файла исключенных слов: Обновлено обновлено обновлено. Обновлено. Исправить исправить Исправить. исправить. .. . ... . . . . отсортированный отсортировано. Отсортировано Сортировано.
и т. Д. И т. Д. И т. Д.
* ОБНОВЛЕНИЕ: это больше не работает, поскольку Twitter отказался от аутентификации по имени пользователя и паролю в пользу OAuth. *
echo status= > c:\hook\post-commit\msg.txt
echo Rev#%2 by >> c:\hook\post-commit\msg.txt
"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %2 %1 >> c:\hook\post-commit\msg.txt
"%VISUALSVN_SERVER%\bin\svnlook.exe" log -r %2 %1 >> c:\hook\post-commit\msg.txt
"c:\Program Files (x86)\GnuWin32\bin\wget.exe" --user=twitterUsername --password=twitterPassword --post-file=c:\hook\post-commit\msg.txt --append-output=c:\hook\post-commit\log.txt --output-document=c:\hook\post-commit\download.txt --delete-after http://twitter.com/statuses/update.xml