获取由python子进程创建的文件列表

鼠尾草88

我正在从python运行几个不同的unix命令作为子进程(使用python的subprocess模块),这些命令会生成文件,稍后将在管道中使用这些文件。我想知道是否有一种优雅的方法来获取这些子流程生成的文件的列表。目前,我只是在使用这样的东西:

self.fastQFiles = []
for filename in os.listdir(self.workdir):
    if re.search(r'\.fastq$', filename, re.IGNORECASE):
        self.fastQFiles.append(self.workdir + "/" + filename)

要搜索工作目录中的所有文件,并仅返回与给定扩展名匹配的文件。如果这是使我的正则表达式更复杂并匹配所有预期文件类型的唯一方法,但是我有点担心匹配的旧文件也会出现在搜索中,我想我可以添加一个datetime组件也是如此,但这感觉很笨拙。

有没有一种更干净的方法来返回由子进程生成的文件名?

编辑:经过更多思考之后,我能想到的最优雅的解决方案是通过集合减法来实现。

preCounter = Counter(os.listdir('/directory'))
subprocess.(processArguments)
postCounter = Counter(os.listdir('/directory'))
newFiles = list(postCounter - preCounter)

如果有更好的方法可以做到这一点,我仍然可以提出建议。

鼠尾草88

好的,所以我想到的解决方案使用@hughdbrown创建DictDiffer类与os.stat()结合使用。我使用os.stat()获取st_mtime属性,该属性是文件的最后修改时间,该属性可用于显示文件是否已从一个时间点覆盖到另一个时间点。我将所有内容存储在字典中,并以文件名作为键,并将st_mtime作为值。

import os
workdir = '/path/to/directory'    
preFileStats = {}
for filename in os.listdir(workdir):
    preFileStats[filename] = os.stat(workdir + "/" + filename).st_mtime

subprocess.(processArguments)

postFileStats = {}
for filename in os.listdir(workdir):
    postFileStats[filename] = os.stat(workdir + "/" + filename).st_mtime

class DictDiffer(object):
    """
    Calculate the difference between two dictionaries as:
    (1) items added
    (2) items removed
    (3) keys same in both but changed values
    (4) keys same in both and unchanged values
    """
    def __init__(self, current_dict, past_dict):
        self.current_dict, self.past_dict = current_dict, past_dict
        self.set_current, self.set_past = set(current_dict.keys()), set(past_dict.keys())
        self.intersect = self.set_current.intersection(self.set_past)
    def added(self):
        return self.set_current - self.intersect 
    def removed(self):
        return self.set_past - self.intersect 
    def changed(self):
        return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
    def unchanged(self):
        return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])

d = DictDiffer(postFileStats, preFileStats)
newFiles = list(d.changed()) + list(d.added())

当然,DictDiffer类非常强大,并且可以用于检查已删除的文件或未更改的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python何时创建子进程?

来自分类Dev

Python何时创建子进程?

来自分类Dev

Python获取子进程的输出

来自分类Dev

Python获取子进程的输出

来自分类Dev

在C中获取父进程的子列表

来自分类Dev

优雅地获取子进程列表

来自分类Dev

在C中分解由fork()创建的子进程

来自分类Dev

获取从父进程创建的所有子/孙进程的 pid

来自分类Dev

在python的子列表中创建子列表

来自分类Dev

创建 python 循环作为“分离的”子进程

来自分类Dev

Python从列表创建子列表的列表

来自分类Dev

python创建名为temporaryfile的临时文件并在其上调用子进程

来自分类Dev

在Python 2.5中使用subprocess.Popen访问子进程创建的文件描述符

来自分类Dev

Python:从文件创建列表

来自分类Dev

Python 子进程无法从 Bat 文件中获取环境变量

来自分类Dev

找不到Python子进程文件

来自分类Dev

python子进程,无此文件或目录

来自分类Dev

Python子进程nbtstat“找不到文件”

来自分类Dev

Python:创建子数组列表

来自分类Dev

进程及其子进程列表

来自分类Dev

如何获取脚本生成的所有子进程的列表

来自分类Dev

通过后台外壳函数获取子进程列表

来自分类Dev

从索引列表创建子列表的Python方法

来自分类Dev

子进程未创建ffmpeg命令的输出文件

来自分类Dev

获取子进程的CPU

来自分类Dev

获取子进程的形式

来自分类Dev

获取子进程的CPU

来自分类Dev

在Unix中创建子进程的子进程

来自分类Dev

如何从用户那里获取输入并将其传递给由python中的子进程调用触发的交互式命令行程序?