Я пытаюсь написать скрипт, который будет перечислять все подкаталоги в каталоге в текстовый файл.
Этот сценарий будет запускаться через 1 час через задание cron, чтобы я мог добавить в текстовый файл, уже созданный в предыдущем запуске, и добавить новые имена подкаталогов.
Например:
/Directory
/subdir1
/subdir2
/subdir3
txt.file
должен иметь следующие столбцы:
subdir_name timestamp first_filenamein_thatSUBDIR
subdir1 2015-23-12 abc.dcm
subdir2 2014-23-6 ghj.nii
.
.
.
Я знаю, чтобы получить список каталогов, используя os.listdir
, но не знаю, как решить эту проблему, так как я хочу написать тот же текстовый файл с новыми именами. Любая идея, как я должен сделать это в Python?
РЕДАКТИРОВАТЬ: С os.listdir я получаю имя подкаталоги, но не отметку времени. И еще одна проблема, как я могу создать два столбца, один с именем подкаталога, а другой с его отметкой времени, как показано выше?
С помощью @ Termi я получил этот код:
import time
import os
from datetime import datetime
parent_dir = '/dicom/'
sub_dirs = os.walk(parent_dir).next()[1]
with open('exam_list.txt','a+') as f:
lines = f.readlines()
present_dirs = [line.split('\t')[0] for line in lines]
for sub in sub_dirs[1:len(sub_dirs)]:
sub = sub + '/0001'
latest_modified = os.path.getctime(os.path.join(parent_dir,sub))
if sub not in present_dirs and time.time() - latest_modified < 4600 :
created = datetime.strftime(datetime.fromtimestamp(latest_modified),'%Y-%d-%m')
file_in_subdir = os.walk(os.path.join(parent_dir,sub)).next()[2][1]
f.write("%s\t%s\t%s\n"%(sub,created,file_in_subdir))
Этот код, набранный на терминале python, хорошо работает со всеми созданными переменными sub, file_in_subdir, имеющими некоторое значение, однако не может записать его в файл, упомянутый в начале кода.
Я также попытался, если запись файла является проблемой, используя следующий код:
with open('./exam_list.txt','a+') as f:
f.write("%s\t%s\n"%(sub,file_in_subdir))
Выше двух строк создает файл должным образом, как я и хотел ..
Не в состоянии указать, в чем заключается ошибка.
3 ответа
Чтобы получить непосредственные подкаталоги в родительском каталоге, используйте os.walk('path/to/parent/dir').next()[1]
.
os.walk().next()
дает список списков как [current_dir, [sub-dirs], [files]], так что next()[1]
дает подкаталоги
Открытие файла с помощью «+» позволит вам как прочитать, так и добавить файл. Затем сохраните подкаталоги, которые уже находятся в файле
with open('dirname.txt','a+') as f:
lines = f.readlines()
present_dirs = [line.split('\t')[0] for line in lines]
Теперь для каждого подкаталога проверьте, присутствует ли он уже в списке, и если нет, добавьте его в файл. Если вы выполняете его каждый час, вы можете даже проверить наличие новых файлов, созданных (или измененных в системах Linux) за последний час, используя getctime
time.time() - os.path.getctime(os.path.join(parent_dir,sub)) < 3600
Теперь для любого нового подкаталога используйте os.walk('path/to/subdir').next[2]
и получите имена файлов внутри
import time
import os
from datetime import datetime
parent_dir = '/path/to/parent/directory'
sub_dirs = os.walk(parent_dir).next()[1]
with open('dirname.txt','a+') as f:
lines = f.readlines()
present_dirs = [line.split('\t')[0] for line in lines]
for sub in sub_dirs:
latest_modified = os.path.getctime(os.path.join(parent_dir,sub))
if sub not in present_dirs and time.time() - latest_modified < 3600 :
created = datetime.strftime(datetime.fromtimestamp(latest_modified),'%Y-%d-%m')
file_in_subdir = os.walk(os.path.join(parent_dir,sub)).next()[2][0]
f.write("%s\t%s\t%s\n"%(sub,created,file_in_subdir))
with open('some.txt', 'a') as output:
output.write('whatever you want to add')
Открытие файла с 'a'
в качестве параметра добавляет в конец все, что вы пишете в него.
Вы можете использовать walk
из пакета os
. Это лучше, чем listdir
. Подробнее об этом вы можете прочитать здесь. En Пример:
import os
from os.path import join, getctime
with open('output.txt', 'w+') as output:
for root, dirs, files in os.walk('/Some/path/'):
for name in files:
create_time = getctime(join(root, name))
output.write('%s\t%s\t%s\n' % (root, name, create_time))
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.