Python将datetime转换为os.utime可用格式
我在Python中无法设置文件的创建时间和修改时间。首先,我通过FTP获取文件的原始时间戳。
我唯一想做的就是在使用ftplib下载的文件上保留原始时间戳。
def getFileTime(ftp,name):
try :
modifiedTime = ftp.sendcmd('MDTM ' + name)
filtid = datetime.strptime(modifiedTime[4:], "%Y%m%d%H%M%S").strftime("%d %B %Y %H:%M:%S")
return filtid
except :
return False
然后我下载了这个文件。
def downloadFile(ftp, fileName) :
try:
ftp.retrbinary('RETR %s' % fileName,open(fileName, 'wb').write)
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' % fileName
os.unlink(fileName)
return False
else:
print '*** Downloaded "%s" to CWD' % fileName
return True
接着,我想把原始时间戳设置到下载的文件上。
def modifyTimestapToOriginal(fileName, orgTime):
#try:
os.utime(fileName, orgTime)
fileName.close()
# return True
# except:
# return False
这是我尝试的方法:
ftp, files = f.loginftp(HOST,user,passwd,remoteDir)
for i in files :
if not f.isDir(ftp,i) :
fixTime = datetime.strptime(varfixtime, "%d-%m-%Y %H:%M:%S")
ftime = f.getFileTime(ftp,i)
if ftime >= fixTime :
print (ftime)
os.chdir('c:/testdownload')
f.downloadFile(ftp,i)
settime = ftime.timetuple()
print "settime '%s'" % settime
#f.modifyTimestapToOriginal(i, settime)
出现的错误是:
os.utime(fileName, orgTime)
TypeError: utime() arg 2 must be a tuple (atime, mtime)
有没有人能帮我,给我一个更好的方法来保留原始文件的时间戳,或者告诉我如何把ftime转换成os.utime可以用的元组?
1 个回答
11
这里提到的times必须是一个包含两个数字的元组,格式是
(atime, mtime)
,用来分别设置访问时间和修改时间。
你没有提供一个元组。在这种情况下,只需将atime
和mtime
都设置为相同的值:
os.utime(fileName, (orgTime, orgTime))
fileName
是一个字符串,所以fileName.close()
是行不通的(你会遇到属性错误),可以直接去掉那一行。
orgTime
必须是一个整数;你现在给的是一个时间元组;需要用time.mktime()
将其转换为自纪元以来的秒数时间戳:
settime = time.mktime(ftime.timetuple())