#python
#python
Вопрос:
Из https://raspberrypi.stackexchange.com/questions/26714/can-i-record-a-24-hour-video-on-the-raspberry-pi-with-camera-module Я пытаюсь изменить код :
import io
import itertools
import picamera
def outputs():
for i in itertools.count(1):
yield io.open('filed.h264' % i, 'wb')
with picamera.PiCamera() as camera:
camera.resolution = (640, 360)
camera.framerate = 24
for output in camera.record_sequence(
outputs(), quality=20, bitrate=750000):
while output.tell() < 1048576:
camera.wait_recording(0.1)
if output.name == 'file99.h264':
break
Этот код «создаст 100 файлов, переходящих, как только каждый из них достигнет> 1 МБ»,
Я пытаюсь изменить так, чтобы после того, как файл достигнет> 5 МБ, создавался новый файл. Должны быть созданы каталоги от 1 до 100, каждый из которых содержит не более 100 файлов. Вот мой прогресс на данный момент :
import io
import itertools
import picamera
import os
def outputs():
for i in itertools.count(1):
yield io.open('filed.h264' % i, 'wb')
for i in range(1 , 101) :
os.mkdir(str(i))
with picamera.PiCamera() as camera:
camera.resolution = (640,480)
camera.framerate = 24
for output in camera.record_sequence(
outputs(), quality=20, bitrate=750000):
while output.tell() < 5048576:
camera.wait_recording(0.1)
if output.name == 'file99.h264':
Как создать файл во вновь созданной папке и проверить эту вновь созданную папку на то, что она содержит 100 файлов?
Ответ №1:
Вы можете использовать первый фрагмент кода и изменить его output
функцию:
def outputs():
dir_count = 0
current_dir = 'dir{}'
for i in itertools.count(1):
if not (i % 100):
dir_count = 1
os.mkdir(current_dir.format(dir_count))
yield io.open((current_dir '/file{:02d}.h264').format(current_dir, i % 100), 'wb')
Или короче:
def outputs():
yield from (
io.open('dir{}/file{:02d}.h264'.format(dir, i), 'wb')
for dir in itertools.count(1)
for i in range(100)
if os.makedirs('dir{}'.format(dir), exist_ok=True) is None
)
Когда количество файлов в каталоге равно 10, будут созданы следующие файлы:
$ ls -h ./*
./dir1:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir10:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir11:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir12:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir13:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir14:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir15:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir16:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir17:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir18:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir19:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir2:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir20:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
./dir21:
file00.h264 file02.h264 file04.h264 file06.h264 file08.h264
file01.h264 file03.h264 file05.h264 file07.h264 file09.h264
# the list goes on and on...
ВНИМАНИЕ!Не забудьте закрыть открытые файлы, потому что их будет много, и вы получите сообщение об открытии слишком большого количества файлов одновременно, если вы их не закроете.