本人为vasp初学者,没用过python。这次尝试用python写了一个脚本用来整理KLABELS以便在画图时直接读取数据,写的并不简洁,见谅!!
import pandas as pd
import numpy as np
import openpyxl
from openpyxl import load_workbook
import xlrd
import os
#————————————————————————处理KLABELS文件(对文件中不需要的数据行进行删除)————————————————————————
with open('KLABELS', "r") as f: #读取文本
data = f.readlines()
b = len(data)
f.close()
print(b)
dirtyid = [0,b-3,b-2,b-1,b] #这个想删除是第几行,根据自己想删的内容筛选出来,并将行数保存在dirtyid
new_data = [] #新建一个列表
for x in range(len(data)):
if x not in dirtyid: #如果 data的行数 不在需要删除的行数里面
new_data.append(data[x]) #将不删的数据赋给另一个列表
with open('.\\KLABELS_new.txt','a+')as f:
f.writelines(new_data)
f.close
data = pd.read_table('KLABELS_new.txt',sep = '\t',header = None)
#print(data.iloc[-1,0]) #测试
#————————————————————————后处理KLABELS文件————————————————————————
file = open('KLABELS_new.txt','r')
lines = file.readlines()
file.close()
matrix = []
for line in lines:
row = line.strip().split(' ')
matrix.append(row)
print(matrix[1]) #测试矩阵存储高对称点信息是否成功
c = len(matrix)
print(len(matrix)) #测试获得存储高对称点矩阵的规格
wb = openpyxl.Workbook()
wb.save('KLABELS.xlsx') #创建一个excel文档用来存储高对称点信息
wb = load_workbook('KLABELS.xlsx')
sheet = wb['Sheet']
i = 0
for i in range(c): #遍历每一格存储高对称点信息
sheet.cell(i+1,1).value = matrix[i][0]
sheet.cell(i+1,2).value = float(matrix[i][-1])
i = i + 1
wb.save('KLABELS.xlsx')
#————————————————————————高对称点信息于excel文件中存储完成后————————————————————————
worksheet = xlrd.open_workbook('KLABELS.xlsx')
sheet = worksheet.sheet_by_name('Sheet')
cols = sheet.col_values(1)
cols1 = sheet.col_values(0)
print(cols)
print(cols1)
os.remove('KLABELS_new.txt') #删除处理痕迹
os.remove('KLABELS.xlsx') #删除处理痕迹
#————————————————————————成功存储高对称点到一个数组里————————————————————————
#————————————————————————验证无误————————————————————————