модуль datetime
может определять время от года до микросекунд.
Вы можете создать строку, используя datetime.datetime.strftime(format)
, которая использует стандартные замены C для создания строки на основе заданного datetime
.
если вы используете datetime.datetime.now()
, вы можете использовать текущую дату:
import datetime
time = datetime.datetime.now()
template = 'Last updated on: %Y-%m-%d'
time_string = time.strftime(template)
print(time_string)
# prints "Last updated on: 2020-01-14"
Как вы описали формат файла, последняя строка всегда должна содержать дату последняя запись, так что вам просто нужно потянуть строки до последней записи и извлечь месяц. Для извлечения вы можете использовать datetime.datetime.strptime(input, format)
с той же строкой формата:
stripped = datetime.datetime.strptime(time_string, fmt)
print(stripped)
print(stripped.month)
# 2020-01-14 00:00:00
# 1
Что касается работы с данными в файле ... это звучит как проблема XY, поэтому я сначала рассмотрю что вы спрашиваете, затем предложите другую тактику c.
Вы хотите обновить данные, если это тот же месяц, и перезаписать данные, если это новый месяц. Вы не можете просто вставить данные в середину файла: у вас есть доступ к указателю чтения / записи (то есть к текущему символу в файле), и вы можете читать или писать в этой позиции.
Вы можете используйте алгоритм примерно так:
- Открыть файл для чтения и записи без усечения ('r +')
- захватить текущую позицию курсора с файлом. Tell () (это будет начинаться с 0)
- читать строки, пока вы не достигнете строки даты. Для этого вы можете просто проверить с помощью datetime.datetime.strptime (строка «Последнее обновление:% Y-% m-% d»). Ошибка ValueError будет вызвана, если она не совпадает.
- , если есть больше строк, снова захватите позицию с помощью file.tell ().
- Повторяйте, пока не останется строк для чтения. Убедитесь, что вы не обновляете позицию в конце файла!
- Теперь у вас есть позиция начала записи последнего месяца в файле. Перезапишите оставшуюся часть файла новым инвентарём и датой.
- Возможно, осталось символов, удалите их.
- Закройте файл
Обратите внимание, что я закрываю файл в конце. Как правило, файлы должны быть закрыты как можно скорее ( Почему я должен закрывать файлы в Python? )
Это по той же причине, а также для простоты, что Я бы предложил другую тактику c. Считайте весь файл в список строк, по одной строке в строке:
with open(filename, 'r') as f:
lines = list(f)
При использовании синтаксиса «как» файл будет закрыт после прочтения строк. Теперь найдите начало записи последней даты (используйте тот же метод из предыдущего алгоритма, но вместо этого в списке.
Измените оставшиеся строки новыми значениями.
Теперь откройте файл в режиме записи. Это обрезает файл (т.е. удаляет все!):
with open(filename, 'w') as f:
for line in lines:
f.write(line)
Вы также можете отслеживать номер строки и делать f.readline()
, пока не прочитаете все, кроме строк, которые хотите изменить, затем выполните с этого момента f.write(line)
.
Основная идея c заключается в следующем: не держите файл открытым дольше, чем нужно. Вносите изменения в память, затем быстро записывайте их в файл и закройте файл еще раз. Если вы не используете огромный файл, это не должно быть проблемой, и с форматом вашего файла я не могу представить, что он становится очень большим.
Как Кроме того, все это, вероятно, будет упрощено, если вы добавите в свой файл заголовок, содержащий положение символа (используя поиск, описанный в алгоритме) для отслеживания начального символа последней записи в файле