土木在线论坛 \ 建筑结构 \ 盈建科 \ 利用Python帮助你批量打包YJK模型文件

利用Python帮助你批量打包YJK模型文件

发布于:2021-02-20 09:42:20 来自:建筑结构/盈建科 [复制转发]

一年又开始了,去年该出出去的图也都出出去了,又要回来画图了,去年画图画到正月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。通过这样的方式,我们即保留了原先的模型文件,又节约了硬盘空间。

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

全部回复(3 )

只看楼主 我来说两句
  • cof1623397139344

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

    2021-11-16 15:30:16

    回复 举报
    赞同0
  • 王铜
    王铜 板凳

    保存哪里运行呢,

    完全不懂编程

    2021-04-08 16:42:08

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

盈建科

返回版块

6306 条内容 · 189 人订阅

猜你喜欢

阅读下一篇

关于盈建科3.0筛选填充墙的问题

求教高手,盈建科3.0是不是没有筛选填充墙的功能和查看填充墙尺寸属性的功能?刚刚发现自己好像布置错了 就是右边的菜单什么构件都有,就是没有填充墙(菜单中的“墙”,看过是剪力墙) 上图也是没有填充墙 我是用上图这个功能加填充墙的,不知道是不是新推出的功能不够完善

回帖成功

经验值 +10