2014-01-15 27 views
1

我有一個包含數據的文本文件如下我需要讀取在python一個文本文件,並獲得選擇的值到一個單獨的陣列

Generated by trjconv : a bunch of waters t= 0.00000 
3000 
1SOL  OW 1 1.5040 2.7580 0.6820 
1SOL HW1 2 1.4788 2.7853 0.7702 
1SOL HW2 3 1.4640 2.8230 0.6243 
2SOL  OW 4 1.5210 0.9510 2.2050 
2SOL HW1 5 1.5960 0.9780 2.1520 
2SOL HW2 6 1.4460 0.9940 2.1640 
3SOL  OW 7 2.1520 2.9020 2.5480 
3SOL HW1 8 2.1351 2.9646 2.6185 

高達3000生。

從此,我需要選擇的值搶成一個單獨的列表,像如下:

X=[1.5040, 1.5210, 2.1520, etc] 
    Y=[2.7580, 0.9510, 2.9020, etc] 
    Z=[0.6820, 2.2050, 2.5480, etc] 

任何一個可以幫我寫這個代碼?

+3

你有什麼試過?你看過csv模塊嗎?你看過熊貓圖書館嗎? – YXD

+0

我可以閱讀它使用讀命令,但我想抓住這些特定的數據到另一個文件。我是新的python。 – user3187811

+2

歡迎來到Stack Overflow!看起來你希望我們爲你寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出和實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論是適用)。您提供的細節越多,您可能會收到的答案就越多。 –

回答

3

這是我猜的一個好方法。

F = open('Data.gro', 'r') 
A = open('XYZ.txt', 'w') 
XO = [] 
YO = [] 
ZO = [] 
XHW1 = [] 
YHW1 = [] 
ZHW1 = [] 
XHW2 = [] 
YHW2 = [] 
ZHW2 = [] 
I = range(1, 10) 
with open('Data.gro') as F: 
    for line in F: 
     if line.split()[0] == '3000': 
      print('Frame') 
      A.write('%s\n' % 'Frame') 
      for R in I: 
       line = next(F) 
       P = line.split() 
       if P[1] == 'OW': 
        x = float(P[3]) 
        y = float(P[4]) 
        z = float(P[5]) 
        XO.append(x) 
        YO.append(y) 
        ZO.append(z) 
       else: 
        if P[1] == 'HW1': 
         x = float(P[3]) 

相同的模式可以用來提取數據。

+0

這是一個可怕的方式!使用字典可以按標籤收集各組值,而不必使用特殊變量。 – alexis

1

如果您的數據保存在my_data.csv中,並且第一個OW行是第一行,這應該可以做到。

import numpy as np 

data = np.genfromtxt('my_data.csv', usecols=[3, 4, 5])[::3] 
x, y, z = data.transpose() 

如果你有一個像你的榜樣頭,並希望開始在第二行,只是改變[::3][1::3]

+0

不,這是不同的在我之間有一些字的字眼。每3000行後面還有3行有單詞。其實我已經寫了一個程序來閱讀它遵循此鏈接[http://stackoverflow.com/questions/21194830/need-help-to-read-gromac-file-in-python] Appriciate你的幫助。 – user3187811

1

使用行分割功能,您可以搜索特定點,然後您可以在找到後讀取下一個記錄。像shanaka一樣表示。

line.split()[0]=='3000' 
相關問題