Там, наверное, лучший способ сделать это, но вы могли бы латать его немного путем подсчета количества файлов в папке, чтобы начать с , а затем ждать, пока нет увеличения этой суммы, например, так:
import glob, os, time
directory = os.path.join('inbox','*') #Uses wildcard so ANY files in the 'inbox' directory are used.
numFiles = len(glob.glob(directory)) #Gets initial number of files
while True:
numFilesNew = len(glob.glob(directory)) #Gets current number of files
if numFilesNew > numFiles: #Compare current amount of files to initial
break #Exit loop if there's an increase
else: time.sleep(1) #Wait if no files were added
files = glob.glob(directory) #Make a list of filenames in the directory
print(files)
Для тех, кто не уверен, glob.glob по существу возвращает список файлов в заданной директории.
Этот код был написан на Python 3.4, но я не вижу причины, по которым он не будет работать в других версиях.
Если вы хотите только файлы определенного расширения, то вы можете обменять
directory = os.path.join('inbox','*')
для
directory = os.path.join('inbox','*.png')
Но изменения курса «.png» для любой расширение файла вам нужно. Конечно, это не значит, что файл, о котором идет речь, на самом деле относится к этому формату/типу, только если он имеет расширение.
Это мой первый ответ на этом сайте, надеюсь, что это поможет! :)
Пожалуйста, покажите свой код. Как вы копируете файлы, асинхронно? –
Нет, само по себе это невозможно. Если бы это был только один файл, вы могли бы проверить, можете ли вы его переименовать, но это не будет работать для каталогов. Если у вас есть некоторый контроль над копированием, вы можете создать файл 'still.working' в начале копии и удалить его как последний шаг. В противном случае вам остается сравнить последние измененные атрибуты и ждать достаточного количества времени после этого. – thebjorn
Если вы можете начать обработку файлов, как только отдельные _files_ будут завершены, то сторожевой таймер (http://pythonhosted.org/watchdog/) может быть решением. – thebjorn