我有一個程序,我正在嘗試寫一個需要一個非常大的目錄(裏面有10,000多個文件),並且會創建新的子目錄以將非常大的目錄分割成更小的塊(每個大約100個文件)。當我在終端中調用它時,我目前沒有提出任何錯誤,但它實際上沒有對大文件進行排序......我認爲問題與os.rename()相關,但我不理解爲什麼我也試過shutil.move()並且仍然有同樣的問題。對不起,我couldent使代碼出現在顏色我是新來的網站爲什麼os.rename程序沒有排序目錄
#!/usr/bin/python
import os
import glob
import sys
from functools import partial
sys.setrecursionlimit(1000)
def mk_osdict(a):
#os.chdir(a)
#grouping files with .mol2 endings only
os_list =glob.glob("*.mol2")
#making a dictionary for the list of files in the directory
os_dict = dict([i,n] for i,n in zip(range(len(os_list)),os_list))
return os_dict
dict_os = mk_osdict("decoys")
#function to sort files into new directories with a specific size.
def init_path(f):
block = (len(f)/100)+1
#i_lst gives a list of the number of entries
i_lst = [str(i) for i in range(block)]
'''paths keys will become new directories, values will be a list
files to be sorted into the corresponding directory'''
paths = dict(["decoydir"+n.zfill(5),[]] for n in i_lst)
for lst in paths.values():
while len(lst) <= block:
for value in f.values():
lst.append(value)
for x,p in paths:
if not os.path.exists(x):
os.mkdir(x)
else:
pass
for index in p:
yield os.rename(index,os.path.join(x,index))
b = init_path(dict_os)
你提到「,但它實際上並沒有排序的大型文件「;你的意思是'它不會從大目錄中刪除文件'?重命名不排序;它重命名文件,並且重命名的副作用可能是將單個文件從一個(大)目錄移動到一個(新的,小的)目錄中。如果您正在忙於在進程正在掃描時更改目錄的內容,但是它可能不會中斷,我還沒有探討過會發生什麼情況。 – 2015-04-01 16:06:17
這不會有幾個原因,但是你的問題的一部分是'init_path'使用'yield'語句,它使得它成爲一個生成器。所以,只需調用它'b = init_path(dict_os)'(這也不起作用,因爲需要兩個參數)只是簡單地初始化生成器並且不執行任何重命名。 – tdelaney 2015-04-01 16:10:08
@JonathanLeffler對此感到抱歉。我的意思是,當我運行程序時,沒有文件被分類到創建的新目錄中。 – 2015-04-01 18:09:52