TypeError:%d format:需要一个数字,而不是getset_descriptor

时间:2014-12-05 20:24:12

标签: python python-2.7 datetime syntax-error typeerror

我正在尝试编写一个脚本,找出当前的日期和时间,然后创建一个名称基于此的文件夹。 我尝试运行代码时收到此错误:

  

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”部分附近。任何建议或帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您在此处未创建datetime个实例:

d = datetime

这只是datetime类型的新引用。属性d.yeard.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)