我正在尝试编写一个脚本,它将目录中的所有子目录列入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中做到这一点?
编辑:使用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,created,file_in_subdir保持一些值,但是,无法将其写入代码开头提到的文件中。
如果使用以下代码编写文件是一个问题我也尝试过:
with open('./exam_list.txt','a+') as f:
f.write("%s\t%s\n"%(sub,file_in_subdir))
以上两行按照我的意图正确创建文件..
无法指出错误是什么。
答案 0 :(得分:1)
with open('some.txt', 'a') as output:
output.write('whatever you want to add')
打开一个以'a'
为参数的文件会将您写入的所有内容附加到其末尾。
答案 1 :(得分:1)
您可以使用walk
包中的os
。
它比listdir
更好。
您可以阅读更多相关信息here
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))
答案 2 :(得分:1)
要获取父目录中的直接子目录,请使用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
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))