2015-02-23 89 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