Python转换要在os.utime中使用的日期时间

Python转换要在os.utime中使用的日期时间,python,datetime,ftp,ftplib,Python,Datetime,Ftp,Ftplib,我无法在Python中对文件设置ctime/mtime。首先,我通过FTP获得文件的原始时间戳 我唯一想做的就是使用ftplib在下载的文件上保留原始时间戳 def getFileTime(ftp,name): try : modifiedTime = ftp.sendcmd('MDTM ' + name) filtid = datetime.strptime(modifiedTime[4:], "%Y%m%d%H%M%S"

我无法在Python中对文件设置ctime/mtime。首先,我通过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的可用元组

否则,时间必须是一个2元组的数字,其形式为
(atime,mtime)
,用于分别设置访问时间和修改时间

你没有给它一个元组。在这种情况下,只需将
atime
mtime
设置为相同的值:

fileName
是一个字符串,因此
fileName.close()
将不起作用(您将得到一个属性错误),只需删除该行即可

orgTime
必须是整数;你给它一个时间元组;将其转换为自以下历元起的时间戳(以秒为单位):


小心使用
time.mktime
它取决于语言环境请参见更好地使用
datetime.datetime.utcfromtimestamp(0)
请参见同一问题中的
os.utime(fileName, (orgTime, orgTime))
settime = time.mktime(ftime.timetuple())