2015-02-23 90 views
0

我有一個.dat文件,我想繪製文件中的一些數據。我刪除使用nom1 = open('file1.dat','rb').readlines()[3:]在Python中分割一個.dat文件來繪製

的.dat文件看起來是這樣的行之後刪除文件的第幾排:

Flow 2012 9 22 24 0 230.0000  354.0856 
Flow 2012 9 23 24 0 231.0000  353.0887 
Flow 2012 9 24 24 0 236.0000  357.0877 
Flow 2012 9 25 24 0 235.0000  358.0837 

總共應該有8列,但它是閱讀每行作爲一個大一套字母和數字。我想繪製時間,這是在「列」2,3和4(例如2012/9/22),列7和8.我想過使用分割函數nom2=nom1.split(),但我得到一個錯誤,說AttributeError: 'list' object has no attribute 'split'。接下來的想法是試圖用白色空間來劃定界限,但對於如何去實現它卻沒有真正的好主意。如果有更快,更有效的方式,請讓我知道。另外,如果我太模糊,請讓我知道。

感謝

+1

您需要遍歷列表中的項目,然後對每個項目進行拆分。 – 2015-02-23 16:27:54

+0

nom1.split(「\ n」)。split()會給你一個你想要的形式的二維數組。 – 2015-02-23 16:40:58

回答

1
>>> file = open(r"class X.txt") 
>>> type(file.readlines()) 
<class 'list'> 

所以readlines方法返回一個列表?所以很明顯,對它做一個切片符號會跳過列表中的前三個項目。但是,該清單究竟是什麼?

>>> for line in file.readlines(): 
    print(type(line)) 
<class 'str'> 
<class 'str'> 
<class 'str'> 
<class 'str'> 

所以每一行都以獨立的字符串讀入!這意味着[3:]將跳過文件中的第3行,而不是列。好的,但是我們怎樣才能得到實際的列?

>>> for line in file.readlines(): 
    print(line.split()) 
['Flow', '2012', '9', '22', '24', '0', '230.0000', '354.0856'] 
['Flow', '2012', '9', '23', '24', '0', '231.0000', '353.0887'] 

好吧,到了那裏,我們只是將每個單獨的字符串(行)分成存儲在列表中的多個字符串。現在我們可以通過執行[3:]來跳過前3列。我們需要某個地方來保存它。每個元素是我們需要的列的列表的列表如何?

>>> interesting = [] 
>>> for line in file.readlines(): 
    interesting.append(line.split()[3:]) 
>>> interesting 
[['22', '24', '0', '230.0000', '354.0856'], ['23', '24', '0', '231.0000', '353.0887'], ['24', '24', '0', '236.0000', '357.0877'], ['25', '24', '0', '235.0000', '358.0837']] 
>>> interesting[0] 
['22', '24', '0', '230.0000', '354.0856'] 

andvoiláthere we go。想一想,希望它能讓自己完全清楚。

+0

如果我想寫一個「有趣」到一個新的.txt文件,我會只是把這樣的: newtxt = open(「newfile」,'wb') newtxt.write(有趣) – BBHuggin 2015-02-23 20:58:02

+0

@BobBlacklock是的,但也許你因爲'wb'的意思是「寫入字節」,而「w」很可能默認爲ASCII字符,所以最好用'w'標誌。 – ljetibo 2015-02-23 21:43:55

+0

@BobBlacklock對不起,我錯過了閱讀,你將不得不通過'有趣'來迭代寫每個成員,否則你只會寫下一個'interesting'的不可用實例。 – ljetibo 2015-02-23 21:50:25