У меня есть программа, которую я пытаюсь написать, которая займет очень большой каталог (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)
Вы упоминаете «, но это на самом деле не сортировать большой файл «; вы имеете в виду, что «он не удаляет файлы из большого каталога»? Переименование ничего не сортирует; он переименовывает файлы, а побочным эффектом переименования может быть перемещение отдельного файла из одного (большого) каталога в один (новый, маленький) каталог. Я не исследовал, что произойдет, если вы заняты изменением содержимого каталога во время сканирования процесса, но он, вероятно, не сломается. –
Это не будет работать по нескольким причинам, но часть вашей проблемы состоит в том, что 'init_path' использует оператор' yield', который делает его генератором. Итак, просто называя его 'b = init_path (dict_os)' (который также не работает, потому что нужны два параметра) просто инициализирует генератор и не выполняет никаких переименований. – tdelaney
@ JonathanLeffler извините за путаницу. Я имею в виду, что когда я запускаю программу, никакие файлы не сортируются в новые созданные каталоги. –