我正在尝试编写一个脚本,找出当前的日期和时间,然后创建一个名称基于此的文件夹。 我尝试运行代码时收到此错误:
TypeError:%d format:需要一个数字,而不是getset_descriptor
这是我的代码:
import os
import time
#import RPi.GPIO as GPIO
import logging
import sys
from datetime import datetime
d = datetime
initYear = "%04d" % (d.year)
initMonth = "%02d" % (d.month)
initDate = "%02d" % (d.day)
initHour = "%02d" % (d.hour)
initMins = "%02d" % (d.minute)ion where you wish to save files. Set to HOME as default.
# If you run a local web server on Apache you could set this to /var/www/ to make them
# accessible via web browser.
folderToSave = "/home/timelapse/timelapse_" + str(initYear) + str(initMonth) + str(initDate) + str(initHour) + str(initMins)
#os.mkdir(folderToSave)
# Set the initial serial for saved images to 1
fileSerial = 1
a = 'timefile'
# Run a WHILE Loop of infinity
while True:
if os.path.isfile(a) == False:
# Set FileSerialNumber to 000X using four digits
fileSerialNumber = "%04d" % (fileSerial)
# Capture the CURRENT time (not start time as set above) to insert into each capture image filename
hour = "%02d" % (d.hour)
mins = "%02d" % (d.minute)
# Define the size of the image you wish to capture.
imgWidth = 800 # Max = 2592
imgHeight = 600 # Max = 1944
print " ====================================== Saving file at " + hour + ":" + mins
# Capture the image using raspistill. Set to capture with added sharpening, auto white balance and average metering mode
# Change these settings where you see fit and to suit the conditions you are using the camera in
os.system("raspistill -w " + str(imgWidth) + " -h " + str(imgHeight) + " -o " + str(folderToSave) + "/" + str(fileSerialNumber) + "_" + str(hour) + str(mins) + ".jpg -sh 40 -awb auto -mm average -v")
# Increment the fileSerial
fileSerial += 1
# Wait 10 minutes before next capture
time.sleep(600)
else:
os.remove(time.txt)
os.system("sudo shutdown -h -P now")
break
print "Quitting now."
sys.exit(0)
我认为代码在这里有错误:
initYear = "%04d"
错误似乎在“%04d”部分附近。任何建议或帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
您在此处未创建datetime
个实例:
d = datetime
这只是datetime
类型的新引用。属性d.year
,d.month
等是描述符,而不是您可以插值的值:
>>> from datetime import datetime
>>> datetime.year
<attribute 'year' of 'datetime.date' objects>
>>> type(datetime.year)
<type 'getset_descriptor'>
>>> '%04d' % datetime.year
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not getset_descriptor
如果您想要当前时间戳,则需要致电datetime.now()
:
d = datetime.now()
有更好的方法可以在字符串中使用datetime值。您可以使用datetime.strftime()
method为您的日期生成字符串格式:
formatted = d.strftime('%Y%m%d%H%M')
folderToSave = "/home/timelapse/timelapse_" + formatted
或者您可以在str.format()
插值中使用相同的格式代码:
folderToSave = "/home/timelapse/timelapse_{:%Y%m%d%H%M}".format(d)
答案 1 :(得分:0)
您的问题是您使用日期时间。 datetime是一个类,而不是一个方法。
获取当前日期,请使用:
d = datetime.now()
看起来您正在尝试格式化各种日期组件。 但是,要引用它们,您需要使用以下格式:
inityear = str(d.year)