我是Python的新手,並一直在教我自己的教科書和StackOverflow。我似乎從本網站的真實世界範例中學到了最好的東西。我希望有人能幫我解決我目前的問題。迭代(或遞歸?)過濾目錄並將結果複製到新目錄
我有一個包含大約1,000個文件的目錄(文件夾)。這些文件的名稱帶有前綴(模式),例如aaa_*
,bbb_*
,ccc_*
等。我想遍歷目錄並複製所有具有指定前綴的文件,並將它們移動到具有該前綴名稱的新目錄中。例如,找到/my_dir_path
中的所有aaa_*
文件,並將它們複製到/my_new_dir_path/aaa
以及同樣所有的bbb_*
到/my_new_dir_path/bbb
。新的目錄已經被創建。
下面這個簡單,樣板,腳本適用於複製前綴樣式中的一個新的目錄:
dir = '/my_dir_path'
pattern = 'aaa_*'
dest = '/my_new_dir_path/aaa'
for root, dirs, files in os.walk(dir):
for filename in fnmatch.filter(files, pattern):
source = (os.path.join(root, filename))
shutil.copy2(source, dest)
我正在掙扎是如何遞歸我的模式,然後列表運行fnmatch.filter
最終將文件輸出到他們自己的目錄。
我試過用*args
的模式列表編寫一些不同的函數定義,但通常會得到一個錯誤消息,即「filter()只需要2個參數(給出3)」。 (我很抱歉沒有代碼示例在這裏給你看,在過去的幾天裏我經歷了很多版本,所以我沒有任何一個代表性的函數定義。)
我是這樣的新手我不知道fnmatch.filter
是否可以遞歸或如何設計一個替代策略。然後,存在如何將每個模式搜索的結果文件存儲到其自己的目錄中的問題。我想我可以創建一個字典事先說,例如,
my_dict = {'my_new_dir_path/aaa': 'aaa_*', 'my_new_dir_path/bbb': 'bbb_*'}
和存儲所產生的文件,根據相應的鍵值,但考慮到我還沒有得到遞歸工作(即打印)我還沒有研究如何將結果複製到新目錄。
我不清楚遞歸所需的結果。你是說你想要在多個層面移動文件嗎?用一個公共前綴重命名目錄? – Prune
在原始目錄中,有文件:aaa_1,aaa_2,aaa_n,bbb_4,bbb_6,bbb_7等。我試圖隔離所有那些'aaa_ *'並將它們複製/移動到標記爲'aaa'的文件夾並所有'bbb_ *'並將它們移動到標記爲'bbb'的文件夾中。新的目錄(aaa,bbb等)已經被創建。 – user69339