2017-07-27 64 views
0

有一個服務器,每15秒將一個.csv文件拖入其中。每隔幾天我想讀入所有新的.csv文件並將數據追加到.h5文件中。我已經完成了所有這些工作,我缺少的小麥是定義要查看的文件的有效方式。目前,我跑:監視目錄內容並將文件添加到列表

all_files = [] 
root = "//server/dir/" 
for path, subdirs, files in os.walk(network_location): 
    for name in files: 
     all_files.append(os.path.join(path, name)) 

所在目錄具有這樣的結構:很長

year 
¦ 
months ... 
    ¦ 
    days ... 

這現在包含自二月和os.walk(數據)正在採取。有沒有辦法讓它只穿過all_files以外的文件?

我看過watchdog,但不太明白如何使它適用於這種情況。有沒有其他的軟件包或方法? all_files應該只是一個字符串列表。

回答

0

簡單的版本:
目錄具有這樣的結構:

tmp 
    ¦ 
    file1.txt 
    file2.txt 

代碼:

import os 
dir_path = r'E:\download\tmp' 
only_file=[dir_path+'\\'+name for name in os.listdir(dir_path) if os.path.isfile(dir_path+'\\'+name) ] 
only_file 

輸出:
[ 'E:\下載\ tmp目錄\ FILE1.TXT' ,'E:\ download \ tmp \ file2.txt']

完整版:
目錄具有這樣的結構:

tmp\2017\1\1\ 
    - 20170101_1.txt' 
    - 20170101_2.txt' 
tmp\2017\1\2\ 
    - 20170102_1.txt' 
    - 20170102_2.txt' 

方法一:
代碼:

import os 
dir_path = r'E:\download\tmp' 
file_list=[] 
for dirPath, dirNames, fileNames in os.walk(dir_path): 
    for f in fileNames: 
     file_list.append(os.path.join(dirPath, f)) 
file_list 

輸出:

['E:\\download\\tmp\\2017\\1\\1\\20170101_1.txt', 
'E:\\download\\tmp\\2017\\1\\1\\20170101_2.txt', 
'E:\\download\\tmp\\2017\\1\\2\\20170102_1.txt', 
'E:\\download\\tmp\\2017\\1\\2\\20170102_2.txt'] 

方法2:

代碼:

import os 
file_list=[] 
dir_path = r'E:\download\tmp' 
only_dir_year=[dir_path+'\\'+name for name in os.listdir(dir_path) if os.path.isdir(dir_path+'\\'+name) ] 
for year_dir in only_dir_year: 
    only_dir_month=[year_dir+'\\'+name for name in os.listdir(year_dir) if os.path.isdir(year_dir+'\\'+name) ] 
    for month_dir in only_dir_month: 
     only_dir_day=[month_dir+'\\'+name for name in os.listdir(month_dir) if os.path.isdir(month_dir+'\\'+name) ] 
for day_dir in only_dir_day: 
    tmp=[day_dir+'\\'+name for name in os.listdir(day_dir) if os.path.isfile(day_dir+'\\'+name) ] 
    file_list=file_list+tmp 
file_list 

輸出:

['E:\\download\\tmp\\2017\\1\\1\\20170101_1.txt', 
'E:\\download\\tmp\\2017\\1\\1\\20170101_2.txt', 
'E:\\download\\tmp\\2017\\1\\2\\20170102_1.txt', 
'E:\\download\\tmp\\2017\\1\\2\\20170102_2.txt'] 
+0

雖然我很欣賞的努力,恐怕方法1是我,這就是問題所在。它遍歷整個目錄,而不僅僅是新文件。 –