|
1 | 1 | #!/usr/bin/env python3
|
2 |
| - |
3 |
| -#%% |
4 |
| -# with open('./test.xyz', 'r') as xyz_file: |
5 |
| -# lines = xyz_file.readlines() |
6 |
| -# print(lines) |
7 | 2 | #%%
|
8 | 3 | import numpy as np
|
9 | 4 | from collections import OrderedDict
|
@@ -44,20 +39,16 @@ def handle_single_xyz_frame(lines):
|
44 | 39 | if len(lines) != atom_num + 2:
|
45 | 40 | raise RuntimeError("format error, atom_num=={}, {}!=atom_num+2".format(atom_num, len(lines)))
|
46 | 41 | data_format_line = lines[1].strip('\n').strip()+str(' ')
|
47 |
| - p1 = re.compile(r'(?P<key>\S+)=(?P<quote>[\'\"]?)(?P<value>.*?)(?P=quote)\s+') |
48 |
| - p2 = re.compile(r'(?P<key>\w+?):(?P<datatype>[a-zA-Z]):(?P<value>\d+)') |
49 |
| - field_list = [kv_dict.groupdict() for kv_dict in p1.finditer(data_format_line)] |
50 |
| - field_dict = {} |
51 |
| - for item in field_list: |
52 |
| - field_dict[item['key']]=item['value'] |
53 |
| - data_format_line = lines[1] |
54 |
| - data_format_list= [m.groupdict() for m in p1.finditer(data_format_line)] |
| 42 | + field_value_pattern= re.compile(r'(?P<key>\S+)=(?P<quote>[\'\"]?)(?P<value>.*?)(?P=quote)\s+') |
| 43 | + prop_pattern = re.compile(r'(?P<key>\w+?):(?P<datatype>[a-zA-Z]):(?P<value>\d+)') |
| 44 | + |
| 45 | + data_format_list= [kv_dict.groupdict() for kv_dict in field_value_pattern.finditer(data_format_line)] |
55 | 46 | field_dict = {}
|
56 | 47 | for item in data_format_list:
|
57 | 48 | field_dict[item['key']]=item['value']
|
58 | 49 |
|
59 | 50 | Properties = field_dict['Properties']
|
60 |
| - prop_list = [m.groupdict() for m in p2.finditer(Properties)] |
| 51 | + prop_list = [kv_dict.groupdict() for kv_dict in prop_pattern.finditer(Properties)] |
61 | 52 |
|
62 | 53 | data_lines = []
|
63 | 54 | for line in lines[2:]:
|
@@ -127,6 +118,7 @@ def handle_single_xyz_frame(lines):
|
127 | 118 | virials = np.array([np.array(list(filter(bool,field_dict['virial'].split(' ')))).reshape(3,3)]).astype('float32')
|
128 | 119 | else:
|
129 | 120 | virials = None
|
| 121 | + |
130 | 122 | info_dict = {}
|
131 | 123 | info_dict['atom_names'] = list(type_num_array[:,0])
|
132 | 124 | info_dict['atom_numbs'] = list(type_num_array[:,1].astype(int))
|
|
0 commit comments