2017-04-25 84 views
1

在我的网络上,计划报表每次运行时都会创建一个新目录(使用随机数),然后在其中放置一个CSV文件。我目前使用pysmbclient通过中小企业获取文件,但我不确定如何导航到此报告的最新目录以及Glob返回的模块(下图)。从日期时间列表中找到最新的目录

我怎样才能到最后创建的目录,我需要解析datetime.datetime第一个不知何故?下面是我有:

import smbclient 
import glob 
import os 

smb = smbclient.SambaClient(server=uk51, ip=10.10.10.10, share="share", 
     username="test", password="password", domain='office') 

# recent = smb.glob(max(glob.iglob(\\*)), key=os.path.getctime)) # Latest directory 
# smb.download(recent + "summary.csv", "/usr/reports/uk51.csv")) # Download latest dir's CSV 


example = smb.glob('\\*') 
print list(example) # Example of what Glob returns 

#> python script.py

#> [(u'1192957', u'D', 0, datetime.datetime(2017, 4, 23, 10, 29, 20)), (u'1193044', u'D', 0, datetime.datetime(2017, 4, 24, 10, 29, 22))]

回答

2

这些4元组是如何从smb.glob()pysmbclient返回数据。您不需要解析日期时间,因为它们已经是datetime.datetime对象,可以按照您通常的排序方式对其进行排序。要获得每个4元组的最后(第3)值可以使用operator.itemgetter

import operator as op 

#example = [(u'1193044', u'D', 0, datetime.datetime(2017, 4, 24, 10, 29, 22)), 
#   (u'1192957', u'D', 0, datetime.datetime(2017, 4, 23, 10, 29, 20))] 
example = list(smb.glob('\\*')) 
example.sort(key=op.itemgetter(3),reverse=True) 
most_recent_dir = example[0][0] # to get the most recent directory name 

然后你会用os.path.join建立路径下载:

import os 

smb.download(os.path.join(most_recent_dir,"summary.csv"), "/usr/reports/uk51.csv") 
+0

感谢您的帮助,我从来没有听说过运营商库。它不是通过* example.sort *部分工作的,它转到了我的Except语句。这个目录中有一个(旧)文件,可能会导致问题?它的读数是[...,(u'random.sv',u'A',1125686,datetime.datetime(2017,2,2,12,45,25))],它看起来也在拉动日期时间。 – LampShade

+0

非常欢迎。什么是例外?该文件不应该导致任何问题。 – bernie

+0

recent.sort(key = op.itemgetter(3),reverse = True) AttributeError:'generator'对象没有'sort'属性。 我把*列表(例子)*,它的工作,但它然后显示这个错误为most_recent_dir:most_recent_dir =最近[0] [0]#得到最近的目录012ErrTypeError:'发电机'对象没有属性'__getitem__' – LampShade

相关问题