利用Python帮助你批量打包YJK模型文件
呐喊的韭菜
2021年02月20日 09:42:36
来自于盈建科
只看楼主

收录于话题 一年又开始了,去年该出出去的图也都出出去了,又要回来画图了,去年画图画到正月29,没来得及整理去年一整年做过的项目文件,刚上班没啥事儿抽点时间搞一搞吧。每年这个时候都该整理一波今年的项目资料了。我去~YJK文件堆了一大箩筐,很占硬盘啊。 这么密密麻麻一整溜的模型占的硬盘实在太大了,小编光调一个模型,备份了这么多,占用的硬盘不下80G。,很多朋友可能会选择Ctrl A,Delete-----》-----》直接删库跑路。但是将来要是有一天需要追溯之前的模型,我们该怎么办?用YJK自带的打包功能?调过40多个模型,操作一波累死了,想想都想放弃。


一年又开始了,去年该出出去的图也都出出去了,又要回来画图了,去年画图画到正月29,没来得及整理去年一整年做过的项目文件,刚上班没啥事儿抽点时间搞一搞吧。每年这个时候都该整理一波今年的项目资料了。我去~YJK文件堆了一大箩筐,很占硬盘啊。


这么密密麻麻一整溜的模型占的硬盘实在太大了,小编光调一个模型,备份了这么多,占用的硬盘不下80G。,很多朋友可能会选择Ctrl A,Delete-----》-----》直接删库跑路。但是将来要是有一天需要追溯之前的模型,我们该怎么办?用YJK自带的打包功能?调过40多个模型,操作一波累死了,想想都想放弃。


今天小编就教大家如何用python批量保留每个模型中的一些必要的模型文件,同时将模型打包。


首先,我们利用YJK自带的模型打包功能,查看模型打包时的一些需要保留下来的文件:

大家可以看到,YJK打包后,保留的主要是以上的这些文件。我们可以直接通过python遍历以上的文件夹,删除那些YJK打包不必要的文件就可以了。以下就是python通过递归遍历每一个模型文件夹,跳过需要保留的文件,删除不需要的文件的代码:

import os

import stat

import shutil

dir=r"D:\2020\ProjectName\M1\3-结构计算模型\施工图阶段"
list = os.listdir(r"D:\2020\ProjectName\M1\3-结构计算模型\施工图阶段")
#列出不删除的文件
savedFiles=["yjkTransLoad.sav","spretobase2.dat","spretobase.dat","SPara.par","fea.dat","dsnctrl.ini","FileName.yjk","FileName.rel","FileName.pre","dsnjc.data"]
def delete_files(path, all_files):
# 首先遍历当前目录所有文件及文件夹

file_list = os.listdir(path)

# 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归

for file in file_list:

# 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录

cur_path = os.path.join(path, file)

#判断需要保留文件夹

if cur_path.find("保留结果")>=1:

  continue

# 判断是否是文件夹

if os.path.isdir(cur_path):

  show_files(cur_path, all_files)

else:

#判断是否为可删除文件

saved=False

  for savedItem in savedFiles:

  if file == savedItem:

  saved=True

  break

  if saved:

continue

else:

#修改只读权限

os.chmod(cur_path, stat.S_IWRITE)

#删除文件

os.remove(cur_path)
return all_files
# 传入空的list接收文件名
contents = delete_files(dir, [])


在不必要的模型文件删除后,我们可以python自带的zipfile库,来批量压缩每个模型文件夹,代码如下:

import zipfile

import os

dir=r"D:\2020\ProjectName\M1\3-结构计算模型\施工图阶段"
list = os.listdir(r"D:\2020\ProjectName\M1\3-结构计算模型\施工图阶段")
def zip_files(path, all_files):

# 首先遍历当前目录所有文件及文件夹

file_list = os.listdir(path)

# 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归

for file in file_list:

# 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录

cur_path = os.path.join(path, file)

# 判断是否是文件夹

if os.path.isdir(cur_path):

  show_files(cur_path, all_files)

else:

all_files.append(cur_path)
return all_files
for listItem in list:
  cur_path = os.path.join(dir, listItem)
    
# 创建压缩文件

zipItem=zipfile.ZipFile(cur_path ".zip", mode='w')
    
# 将文件存入压缩文件
    
allfiles=zip_files(cur_path,[])

  for fileItem in allfiles:
        
zipItem.write(fileItem)


以下就是通过python批量压缩过的文件夹:


通过这两步操作后,原先80G的模型文件成功被压缩到了只有860M。通过这样的方式,我们即保留了原先的模型文件,又节约了硬盘空间。

小伙伴们又可以省出空间调今年的模型了。

zcq576535538
2021年04月05日 23:10:29
2楼

请问楼主,这个代码是保存哪里运行呢,完全不懂编程

回复
王铜
2021年04月08日 16:42:22
3楼

保存哪里运行呢,

完全不懂编程

回复
cof1623397139344
2021年11月16日 15:30:43
5楼

@所有人,这个代码运行需要自己安装python或anaconda3,个人建议安装anaconda3,网上搜索一下安装教程就行。安装完后运行anaconda3里面的spyder,再调整spyder的当前目录,最后运行代码就行了,整体来说需要一定的基础。其实楼主最好还是用pyindtaller打包成exe文件发给大家执行就好了。

回复

相关推荐

APP内打开