前提要求:
1. 安装Anaconda (https://www.anaconda.com/distribution/#download-section)。完成后打开,安装spyder (此处任意)。
2. 安装Cygwin (Cygwin),安装过程都是默认选项,最一步选择 `cmake`, `make`, `wget`, `gcc-core`, `gcc-g++`, and `pkg-config` packages 进行安装。
3. 安装Java (https://www.java.com/en/download/) 并配置系统变量。如果不确定,尝试在win+R “cmd”命令中运行“java”,看看它是否成功调用java。(自行百度)
4,解压mofid-master。
安装步骤:
- 打开Cygwin, 输入 “cd /cygdrive/c/mofid-master”, 按enter键,其中c为硬盘,mofid-master为解压后的文件夹;
- 输入“make init”; 开始执行makefile文件。(过程有点长)
- 管理员方式打开Anaconda Prompt ,输入mofid-master所在盘例如“d:”,然后“cd /mofid-master(路径)”。最后依次输入运行“python set_paths.py install”,“python setup.py install” 安装,至此安装完毕。
使用:
1,简单使用MOFid拆分单个MOF
Spyder中输入以下代码:
from mofid.run_mofid import cif2mofid #该行代码需在spyder右上角打开安装完毕后的路径“\mofid-master\mofid-master\build\lib”下运行。
cif_path = '/path/to/my/mof.cif' #'/path/to/my/mof.cif'为存放cif文件的路径
mofid = cif2mofid(cif_path)
2,批量拆分MOF
Spyder中输入以下代码:
## 批量计算cif文件
import os
from mofid.run_mofid import cif2mofid
path = "E:/All file/MOF database/Core MOF/both" #cif文件夹目录
files= os.listdir(path) #得到文件夹下的所有文件名称
txts = []
for file in files: #遍历文件夹
cif_path = path+'\\'+ file #构造绝对路径,"\\",其中一个'\'为转义符
mofid = cif2mofid(cif_path,output_path='output'+file)
print("文件处理完毕")
3,批量提取拆分后的文件(整体思路先提取所需的含拆分后cif文件的所有文件夹,再从中提取所需的cif)
1)提取拆分后相关cif文件夹(此处有MetalOxo,SingleNode,AllNode,自己看文献各取所需,我这里举例MetalOxo。只要‘python_mofkey’的看第二步)
Spyder中输入以下代码:
##批量提取MetalOxo 文件夹
import os,sys
import shutil
def copy_folder(rootpath, dstpath):
# 读取文件夹目录,返回指定的文件夹包含的文件或文件夹的名字的列表
dirs = os.listdir(rootpath)
# 将读取的文件夹名字转成数组形式
for dir in dirs:
# print(dir)
# 移动符合条件的文件夹并重命名
if os.path.exists(rootpath + os.path.sep + dir + os.path.sep + 'MetalOxo'):
shutil.copytree(rootpath + os.path.sep + dir + os.path.sep + 'MetalOxo', dstpath + os.path.sep + 'all' + os.path.sep + dir+'-MetalOxo')
else:
continue
if __name__ == '__main__':
rootpath = 'E:/ Core MOF/convert' #设置原始拆分后的文件夹
dstpath = 'E:/All file/MOF database/Core MOF\\all_output' # 设置提取的文件夹路径
copy_folder(rootpath, dstpath)
print("Finish!!")
2) 批量提取cif文件或“python_mofkey.txt”
新建批处理文件:首先新建txt文件,输入以下代码后另存为bat后缀文件,并放至all_output文件夹(以上一步骤结果为例)下双击即可运行。该例子是提取所有的拆分后的MOF的MetalOxo文件夹下的linkers.cif文件。该批处理文件使用的前提是需要提取的文件仅在文件夹下一级,因此也可以直接批量提取拆分后文件夹下的“python_mofkey.txt”文件。
@echo off
# 设置拷贝到all_output_linkers文件夹路径
set "folderTarget= E:\all_output_linkers"
for /f "delims=" %%i in ('dir /ad /b') do (
if "%%i" neq "%folderTarget%" (
copy /y "%%i\linkers.cif" "%folderTarget%\"
ren "%folderTarget%\linkers.cif " "%%i_linkers.cif "
)
)