我正在尝试编写一个脚本,该脚本会将目录中的所有子目录列出到txt文件中。
该脚本将通过cron作业每1小时运行一次,以便我可以附加到上次运行中已创建的txt文件中,并添加新的子目录名称。
例如:
/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
获取目录列表,但不知道如何解决此问题,因为我想用新名称编写相同的txt文件。一个想法我应该如何在python中做到这一点?EDit:使用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))
以上两行会按照我的预期正确创建文件。
无法指出是什么错误。
最佳答案
要获取父目录中的直接子目录,请使用os.walk('path/to/parent/dir').next()[1]
。os.walk().next()
给出列表的列表,例如[current_dir,[sub-dirs],[files]],因此next()[1]
给出子目录
使用“ a +”打开文件将使您既可以读取文件,又可以追加文件。然后存储文件中已经存在的子目录
with open('dirname.txt','a+') as f:
lines = f.readlines()
present_dirs = [line.split('\t')[0] for line in lines]
现在,对于每个子目录,检查列表中是否已经存在该子目录,如果没有,则将其添加到文件中。如果您每小时执行一次,您甚至可以使用
getctime
检查最近一小时内创建(或在Linux系统中修改过)的新文件。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))