仅在特定目录中使用os.system()

时间:2017-11-06 14:17:23

标签: python os.system

我有一个目录,其中包含具有相似名称的mutliple文件和以这些名称命名的子目录,以便具有相同名称的文件位于该子目录中。我试图将给定子目录中的所有.sdf文件连接到单个.sdf文件。

:hover

但是当我运行它时,连接文件包含原始目录中的每个.sdf文件,而不仅仅是所需文件中的.sdf文件。如何更改我的脚本以仅连接子目录中的文件?

1 个答案:

答案 0 :(得分:4)

这是一种非常笨拙的方式。建议不要使用chdir,也可以使用system(不推荐使用,并且过度杀手以致cat

让我提出一个使用glob.glob的纯python实现来过滤.sdf文件,并逐个读取每个文件并写入循环之前打开的大文件:

import glob,os
big_sdf_file = "all_data.sdf" # I'll let you compute the name/directory you want
with open(big_sdf_file,"wb") as fw:
    for sdf_file in glob.glob(os.path.join(Path,"*.sdf")):
        with open(sdf_file,"rb") as fr:
           fw.write(fr.read())

我没有计算big_sdf_file,我不建议把它放在与其他文件相同的目录中,因为运行两次脚本会导致输出也作为输入。

请注意,这种方法的缺点是,如果文件很大,它们会完全读入内存,这可能会导致问题。在这种情况下,请替换

fw.write(fr.read())

由:

shutil.copyfileobj(fr,fw)

(在这种情况下,导入shutil是必要的)。这允许数据包复制而不是全文件读/写。

我补充一点,它可能不是您期望的完整解决方案,因为似乎有一些关于扫描Path的子目录以创建1大{ {1}}每个子目录的文件,但使用提供的代码并不使用任何系统命令或.sdf,它应该更容易适应您的需求。