2010-11-10 46 views
0

我需要檢查目錄是否存在一系列文件。如何有效檢查文件的正確序列?

例如在根目錄,要求是,如果有一個文件名爲:love.dat,那麼就應該有3個與之相關的文件,例如有:

love_p.dat 
love_r.dat 
love_q.dat 

當然,目錄包含其他文件以及目錄。但是沒有與另一個文件相關的文件位於不同的目錄中。因此,如果love.dat位於根目錄,則其所有相關文件也都位於根目錄中。

我使用BTW java和提供給我的所有其他信息是基礎文件名與關係的列表(例如,在上述情況下,love被存儲在基本文件列表作爲字符串love

+1

問題在哪裏? – joni 2010-11-10 08:07:33

+0

如果你不告訴我們你正在使用什麼環境和編程/腳本語言,這將被關閉爲「與編程無關」。 * P.S。這不是威脅,我只是預測社區如何迴應你的問題。這是無法回答的* – 2010-11-10 08:08:56

+0

同意。你需要在程序中做到這一點? BASH?是否需要檢查相關文件是否存在?請澄清這個問題。 – 2010-11-10 08:09:17

回答

0

僞代碼:

def check_directory(directory): 
    """Returns whether the directory has all the required names.""" 
    names = ["love.dat", "love_p.dat", "love_r.dat", "love_q.dat"] 
    return all(os.path.exists(os.path.join(directory, x) for x in names)) 

尤其要注意這個用「聰明」的文件名操作使用的路徑連接方法(這和具體的操作系統),但它極有可能正常的字符串操作會工作的優良這裏;再加上注意它測試這些名稱的存在 - 如何做到這一點取決於你的確切環境和語言 - 而其餘的只是樣板來設置。

如果「愛」是乾的,而不是字面的名字,你需要動態地將它添加到名稱列表:

def check_directory(directory, stem): 
    """Returns whether the directory has all the required names.""" 
    names = [stem + x for x in [".dat", "_p.dat", "_r.dat", "_q.dat"]] 
    return all(os.path.exists(os.path.join(directory, x) for x in names)) 

print check_directory("/", "love") # example use 

如果你要檢查所有可能的莖在一個給定的目錄,您只需循環顯示該目錄中的名稱:

def find_file_groups(directory): 
    """Returns groups of files as tuples of (base, _p, _r, _q).""" 
    for name in os.listdir(directory): 
    if name.endswith(".dat"): # apply more filters if required 
     base = name[:-4] # remove .dat 
     names = tuple(base + x for x in [".dat", "_p.dat", "_r.dat", "_q.dat"]) 
     if all(os.path.exists(os.path.join(directory, x) for x in names)): 
     yield names 
+0

現在你已經更新了問題,說你正在使用Java,我的上面的僞代碼可能不適用,但我至少要離開它,直到有更好的答案,以防它有幫助。 – 2010-11-11 04:04:43