获取文本文件中的子目录列表,并附加具有新子目录名

时间:2015-12-18 20:08:40

标签: python python-2.7 os.walk

我正在尝试编写一个脚本,它将目录中的所有子目录列入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))

以上两行按照我的意图正确创建文件..

无法指出错误是什么。

3 个答案:

答案 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

检查在过去一小时内创建(或在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))