
materials project是一个非常强大的材料数据库,配合python材料基因组软件包pymatgen,还可实现数据信息的批量提取,吸附位点结构的批量生成,相图计算,可视化能带等许多功能。今天介绍一下如何根据需求,批量提取含某种元素的所有结构信息(以含锂化合物为例),包括凸包能,形成能,结构参数等等。并指定所含化合物的个数。最终生成.csv文件。

python批量提取结构信息
import pymatgen as mg
from pymatgen import Structure,Lattice,MPRester,Molecule
from pymatgen import MPRester
from pymatgen import Composition, Element
import itertools
import IPython
import random
mpr = MPRester('API-KEY')
import json
import requests
import csv
import pandas as pd
class MP(object):
def __init__(self):
self.url = 'https://materialsproject.org//rest//v2//query'
self.APIKEY = "82eb6zMkxRyEa4Uc"
self.elements = ['H', 'He', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar',
'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br',
'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Te', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te',
'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm',
'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn',
'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm','Md', 'No', 'Lr',
'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og', 'Uue']
self.mp = []
self.ele_num = int(input("请输入元素种类的个数:"))
def get_data(self):
#ele_num = int(input("请输入元素种类的个数:"))
data = {
'criteria': {
'elements': {'$in': self.elements, '$all': ['Li']},
'nelements': self.ele_num,
},
'properties': [
"material_id",
'energy',
'energy_per_atom',
'nsites',
'is_hubbard',
'elements',
'nelements',
'total_magnetization',
'oxide_type',
"unit_cell_formula",
"crystal_system",
"spacegroup",
"pretty_formula",
"spacegroup",
"formation_energy_per_atom",
"e_above_hull",
"volume",
"band_gap",
"density"
]
}
r = requests.post(self.url,headers={'X-API-KEY': self.APIKEY},data={k: json.dumps(v) for k,v in data.items()})
response_content = r.json() # a dict
self.mp.append(response_content)
return self.mp
def write_to_file(self):
mp_info = self.get_data()
n = mp_info[0]['response']
headers = [
"material_id",
'energy',
'energy_per_atom',
'nsites',
'is_hubbard',
'elements',
'nelements',
'total_magnetization',
'oxide_type',
"unit_cell_formula",
"crystal_system",
"spacegroup",
"pretty_formula",
"spacegroup",
"formation_energy_per_atom",
"e_above_hull",
"volume",
"band_gap",
"density",
]
with open('materials_info%d.csv'%(self.ele_num), 'a', newline='',encoding='utf-8') as f:
writer = csv.DictWriter(f,fieldnames=headers) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
writer.writeheader() # 写入列名
writer.writerows(n) # 写入数据
f.close()
s = MP()
s.write_to_file()

◆ Linux Shell 编程特殊符号详解
◆ 再谈重定向
◆ 详解Linux正则
◆ Python正则知多少
◆ Linux三剑客之grep
◆ Linux三剑客之sed详解(1)
◆ linux三剑客之sed详解(2)
◆ 小白入门awk必备
◆ 你所不知道的awk内建函数
文章转载自Linux与数据库自学之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。