2017-02-23 68 views
0

我有一個分子結構的列向量格式的Python:轉換列向量名爲.xyz文件格式

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 

這很容易完成?如果難以添加原子類型,那麼只需將座標重新排列到列上就可以了(至少可以減少手動操作)。

回答

0

我不明白什麼字母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 
+0

嗯,我還需要導入的文本文件包含數字(按列向量排序)。 「\ n」是什麼意思? – Yoda

+0

@Yoda \ n的意思是「新行」,這是一個字符像任何其他。它們可以被擦除。我將編輯並澄清我的答案。 –

相關問題