Это должно сделать это:
In [12]: L
Out[12]: ['name1', 'name2', 'name3', 'name4', 'name5', 'name6']
In [13]: for i in range(0,len(L),3): print ' '.join(L[i:i+3])
name1 name2 name3
name4 name5 name6
EDIT: получить все в фиксированную ширину (некоторый код, который я написал некоторое время, чтобы превратить столбчатые данные в таблицу. Все, что вам нужно сделать, это columnize ваши данные и вызов этого старого кода):
def tabularize(infilepath, outfilepath, delim='\t', largeFile=False):
""" Return nothing
Write into the file in outfilepath, the contents of infilepath, expressed in tabular form.
The tabular form is similar to the way in which SQL tables are displayed.
If largeFile is set to True, then no caching of lines occurs. However, two passes of the infile are required"""
if largeFile:
widths = getWidths(infilepath, delim)
else:
with open(infilepath) as infile:
lines = [line.strip().split(delim) for line in infile.readlines() if line.strip()]
widths = [max([len(row) for row in rows])+2 for rows in izip_longest(*lines, fillvalue="")]
with open(outfilepath, 'w') as outfile:
outfile.write("+")
for width in widths:
outfile.write('-'*width + "+")
outfile.write('\n')
for line in lines:
outfile.write("|")
for col,width in izip_longest(line,widths, fillvalue=""):
outfile.write("%s%s%s|" %(' '*((width-len(col))/2), col, ' '*((width+1-len(col))/2)))
outfile.write('\n+')
for width in widths:
outfile.write('-'*width + "+")
outfile.write('\n')
def getWidths(infilepath, delim):
answer = defaultdict(int)
with open(infilepath) as infile:
for line in infile:
cols = line.strip().split(delim)
lens = map(len, cols)
for i,l in enumerate(lens):
if answer[i] < l:
answer[i] = l
return [answer[k] for k in sorted(answer)]
def main(L, n, infilepath, outfilepath):
iterator = iter(L)
with open(infilepath, 'w') as infile:
for row in itertools.izip_longest([iterator]*n, fillavalue=''):
infile.write('\t'.join(row)+'\n')
if len(L) > 10**6:
largeFile = True
tabularize(infilepath, outfilepath, delim='\t', largeFile)
Метки времени в MySQL обычно используются для отслеживания изменений в записях и часто обновляются каждый раз, когда запись изменяется. Если Вы хотите сохранить определенное значение, необходимо использовать поле даты и времени.
, Если Вы подразумевали, что хотите решить между использованием метки времени UNIX или собственного поля даты и времени MySQL, пойдите с собственным форматом. Можно сделать вычисления в MySQL тот путь ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")
, и просто изменить формат значения к метке времени UNIX ("SELECT UNIX_TIMESTAMP(my_datetime)")
при запросах записи, если Вы хотите воздействовать на него с PHP.
Я принимаю это решение о семантической основе.
я использую метку времени, когда я должен записать (более или менее) фиксированную точку вовремя. Например, когда запись была вставлена в базу данных или когда некоторое пользовательское действие произошло.
я использую поле даты и времени, когда дата может быть назначена и изменена произвольно. Например, когда пользователь может сохранить более поздние назначения изменения.
МЕТКА ВРЕМЕНИ составляет 4 байта По сравнению с 8 байтами для ДАТЫ И ВРЕМЕНИ.
в http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
, Но как scronide было сказано, что он действительно имеет нижний предел 1970 года. Это является большим для чего-либо, что могло бы произойти в будущем хотя ;)
Я всегда использовал бы метку времени Unix при работе с MySQL и PHP. Главная причина для этого являющегося значение по умолчанию дата метод в PHP использует метку времени в качестве параметра, таким образом, не было бы никакого необходимого парсинга.
Для получения текущей метки времени Unix в PHP просто сделайте time();
, и в MySQL делают SELECT UNIX_TIMESTAMP();
.
Я всегда использую поля DATETIME для чего-либо кроме метаданных строки (дата, созданная или измененная).
Как упомянул в документации MySQL:
тип ДАТЫ И ВРЕМЕНИ используется при необходимости в значениях, которые содержат обе информации о дате и времени. MySQL получает и отображает значения ДАТЫ И ВРЕМЕНИ в 'YYYY-MM-DD HH:MM:SS' формат. Поддерживаемый диапазон '01.01.1000 0:00:00' к '31.12.9999 23:59:59'.
...
Тип данных timestamp имеет диапазон '01.01.1970 0:00:01' UTC к '09.01.2038 3:14:07' UTC. Это имеет переменные свойства, в зависимости от версии MySQL и режима SQL, в котором работает сервер.
Вы, довольно вероятно, поразите нижний предел в МЕТКИ ВРЕМЕНИ во всеобщем употреблении - например, дата рождения хранения.
timestamp
поле является особым случаем datetime
поле. Можно создать timestamp
столбцы, чтобы иметь специальные свойства; это может быть установлено обновить себя на любом, создают и/или обновляют.
В "больших" терминах базы данных, timestamp
имеет несколько особых случаев, включает его.
то, Что правильный, зависит полностью от того, что Вы хотите сделать.
Я предпочитаю использовать метку времени так, чтобы сохранить все в одном общем формате .raw и отформатировать данные в коде PHP или в Вашем SQL-запросе. Существуют экземпляры, где это пригождается в Вашем коде для хранения всего в простые секунды.
В MySQL 5 и выше, МЕТКА ВРЕМЕНИ значения преобразовываются от зоны текущего времени до UTC для устройства хранения данных и преобразовали назад от UTC до зоны текущего времени для извлечения. (Это происходит только для Типа данных timestamp, и не для других типов, таких как ДАТА И ВРЕМЯ.)
По умолчанию, зона текущего времени для каждого соединения является временем сервера. Часовой пояс может быть установлен на основе для каждого подключения, как описано в MySQL Server Time Zone Support .
Основное отличие состоит в том, что dateTime постоянна, когда Timestamp влияет на настройку Time_zone
.
Так что это имеет значение только тогда, когда у вас есть - или в будущем есть - синхронизированные кластеры через часовые пояса.
У более простых слов: Если у меня есть база данных в Австралии, и сделайте дамп этой базы данных, чтобы синхронизировать / заполнить базу данных в Америке, то временная метка будет обновляться, чтобы отразить в реальном времени события в новом Часовой пояс, в то время как DateTime все равно будет отражать время события в часовой поясе AU .
Отличный пример использования DateTime, используемый, когда Timestamp должен был использован, находится в Facebook, где их серверы никогда не совсем уверены, во сколько времени произошло через часовые пояса. Как только у меня разговор, в котором говорится, что я отвечал на сообщения до того, как сообщение действительно было отправлено. (Это, конечно, также может быть вызвано плохим переводом часового пояса в программном обеспечении обмена сообщениями, если время размещены, а не синхронизированные.)
TIMESTAMP всегда указывается в формате UTC (то есть в секундах, прошедших с 1970-01-01, в формате UTC), и ваш сервер MySQL автоматически преобразует его в дату/время для часового пояса соединения. В долгосрочной перспективе TIMESTAMP — это то, что вам нужно, потому что вы знаете, что ваши временные данные всегда будут в формате UTC. Например, вы не испортите даты, если перейдете на другой сервер или измените настройки часового пояса на своем сервере.
Примечание: часовой пояс соединения по умолчанию — это часовой пояс сервера, но его можно (должно) изменить для каждого сеанса (см. SET time_zone = ...
).
DATETIME
не содержит информации часового пояса с ним и будет всегда отображать того же независимого политика часового пояса, который является в действительности для сервера. Однако, если я инициализирую DATETIME
столбец с функцией такой как NOW()
, а не литерал такой как '2020-01-16 12:15:00'
, тогда сохраненное значение, конечно, будет текущей датой и время, локализованное к часовому поясу сервера.
А TIMESTAMP
, в отличие от этого, неявно содержит информацию часового пояса: Когда Вы инициализируете TIMESTAMP
столбец со значением, то значение преобразовывается в UTC, прежде чем это будет сохранено. Если сохраненное значение является литералом такой как '2020-01-16 12:15:00'
, оно интерпретируется как являющийся в текущем часовом поясе сервера в целях преобразования. С другой стороны, когда TIMESTAMP
столбец отображен, он будет сначала преобразован от UTC до текущего часового пояса сервера.
, Когда использовать один или другой? Тематическое исследование
Веб-сайт А для группы самодеятельного театра представляет несколько действий игры, за которую он продает билеты. Даты и время этих действий появятся в выпадающем, из которого клиент, желающий купить билеты для производительности, выберет ту. Имело бы смысл для столбца performance_date_and_time
базы данных быть DATETIME
тип. Если производительность находится в Нью-Йорке, существует понимание, что существует неявный включенный часовой пояс ("нью-йоркское местное время"), и идеально мы хотели бы, чтобы дата и время отобразилась как '12 декабря 2019 в 20:00' независимо от часового пояса сервера и не имея необходимость переходить к проблеме необходимости сделать любые преобразования часового пояса.
, С другой стороны, как только производительность 20:00 12-го декабря 2019 началась, мы больше не могли бы хотеть продавать билеты для нее и таким образом больше не отображать ту производительность в выпадающем. Так, мы хотели бы знать, произошло ли '12.12.2019 20:00:00' или нет. Это привело бы доводы в пользу наличия TIMESTAMP
столбец, установка часовой пояс сервера для сессии к 'America/New_York' с [1 111] и затем хранение '2019-12-12 20:00:00'
в TIMESTAMP
столбец. Впредь мы можем протестировать на то, началась ли производительность путем сравнения этого столбца с [1 114] независимый от текущего часового пояса.
Или могло бы иметь смысл иметь DATETIME
и TIMESTAMP
столбец в этих двух отдельных целях. Или нет. Очевидно, любой мог служить обеим целям. Если Вы идете только с DATETIME
столбец, то необходимо установить текущий часовой пояс на локальный часовой пояс прежде, чем соответствовать [1 118]. Если Вы идете только с TIMESTAMP
столбец, необходимо установить текущий часовой пояс на локальный часовой пояс прежде, чем отобразить столбец.