我有一个目录,其中包含具有相似名称的mutliple文件和以这些名称命名的子目录,以便具有相同名称的文件位于该子目录中。我试图将给定子目录中的所有.sdf文件连接到单个.sdf文件。
:hover
但是当我运行它时,连接文件包含原始目录中的每个.sdf文件,而不仅仅是所需文件中的.sdf文件。如何更改我的脚本以仅连接子目录中的文件?
答案 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
,它应该更容易适应您的需求。