Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python:将列向量转换为.xyz文件格式_Python 2.7 - Fatal编程技术网

Python 2.7 Python:将列向量转换为.xyz文件格式

Python 2.7 Python:将列向量转换为.xyz文件格式,python-2.7,Python 2.7,我有一个分子几何的列向量 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 x6 y6 z6 x7 y7 z7 x8 y8 z8 我想将其转换为.xyz文件格式: number of atoms comment line C x1 y1 z1 H x2 y2 z2 H x3 y3 z3 C x4 y4 z4 H x5 y5 z5 H x6 y6 z6 O x7 y7 z7 O x8 y8 z8 这容易做到吗?如果很难添加原子类型,那么只需将坐标重新排列

我有一个分子几何的列向量

x1
y1
z1
x2
y2
z2
x3
y3
z3
x4
y4
z4
x5
y5
z5
x6
y6
z6
x7
y7
z7
x8
y8
z8
我想将其转换为.xyz文件格式:

number of atoms
comment line
C x1 y1 z1
H x2 y2 z2
H x3 y3 z3
C x4 y4 z4
H x5 y5 z5
H x6 y6 z6
O x7 y7 z7
O x8 y8 z8

这容易做到吗?如果很难添加原子类型,那么只需将坐标重新排列到列中就可以了(至少可以减少手动劳动量)。

我不明白字母O、H、C的意思,也不知道如何添加这些信息(我不是化学家)。它们存放在哪里?但是如果你是一名科学家,你可能会使用numpy模块。因此,这里有一个简单的解决方案,可以将行三乘三地转换:

import numpy as np
import csv 

#assuming your vector is in a text file
vector = np.genfromtxt('yourfilename.txt',dtype='str')

a = np.array(vector)
a = a.reshape((-1, 3))

print(a)
输出:

[['x1' 'y1' 'z1']
 ['x2' 'y2' 'z2']
 ['x3' 'y3' 'z3']
 ['x4' 'y4' 'z4']
 ['x5' 'y5' 'z5']
 ['x6' 'y6' 'z6']
 ['x7' 'y7' 'z7']
 ['x8' 'y8' 'z8']]

"""
The output is a list of lists in which each element is a row. 
Numpy has a simple method to write a 2D array in a csv file :
np.savetxt("youfilename.csv", a, delimiter=",")
but since I get a bug in this moment, I will use a classical method.
"""
with open("output.csv", "w") as f:
    writer = csv.writer(f)
    writer.writerows(a)
您的csv文件:

x1,y1,z1

x2,y2,z2

x3,y3,z3

x4,y4,z4

x5,y5,z5

x6,y6,z6

x7,y7,z7

x8,y8,z8

我还需要导入一个包含数字的文本文件(按列向量排序)。“\n”是什么意思?@Yoda\n的意思是“newline”,这是一个与其他字符类似的字符。它们可以被擦除。我将编辑并澄清我的答案。