2017-04-25 95 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

相關問題