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

Python 仅在特定目录中使用os.system(),python,os.system,Python,Os.system,我有一个目录,其中包含具有相似名称的多个文件和以这些名称命名的子目录,以便具有相似名称的文件位于该子目录中。我正在尝试将给定子目录中的所有.sdf文件连接到一个.sdf文件 import os from os import system for ele in os.listdir(Path): if ele.endswith('.sdf'): chdir(Path + '/' + ele[0:5]) system('cat' + ' ' + '*.sdf' + '>

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

import os 
from os import system 
for ele in os.listdir(Path):
  if ele.endswith('.sdf'):
    chdir(Path + '/' + ele[0:5])
    system('cat' + ' ' + '*.sdf' + '>' + ele[0:5] + '.sdf') 

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

这是一种非常笨拙的方法。不建议使用chdir,系统可能不推荐使用,也可能过度使用调用cat

让我提出一个纯python实现,使用glob.glob来过滤.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_文件,我不建议将它与其他文件放在同一个目录中,因为运行两次脚本也会导致将输出作为输入

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

fw.write(fr.read())
作者:

在这种情况下,有必要进口shutil。允许数据包复制而不是完整的文件读/写


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

这是一种非常笨拙的方法。不建议使用chdir,系统可能不推荐使用,也可能过度使用调用cat

让我提出一个纯python实现,使用glob.glob来过滤.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_文件,我不建议将它与其他文件放在同一个目录中,因为运行两次脚本也会导致将输出作为输入

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

fw.write(fr.read())
作者:

在这种情况下,有必要进口shutil。允许数据包复制而不是完整的文件读/写


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

您的代码段缺少一些导入,您可以包含它们吗?我已经更新了它并编写了一些io plz!您的代码段缺少一些导入,您可以包含它们吗?我已经更新了它并编写了一些io plz!