在python中使用readlines?第一次

use*_*768 8 python readlines

我有一个包含数据列的文本文件,我需要将这些列转换为单独的列表或数组.这就是我到目前为止所拥有的

f = open('data.txt', 'r')
temp = []
for row in f.readlines():
    Data = row.split()
    temp.append(float(Data[0]))
Run Code Online (Sandbox Code Playgroud)

当我跑这个我得到IndexError: list index out of range.

下面的数据片段:

16  0.2000  
17  0.3000  
18  0.4000  
20  0.5000  
21  0.6000  
22  0.7000
24  0.8000  
25  0.9000
26  1.000   
Run Code Online (Sandbox Code Playgroud)

我需要第一列,如果可能的话,看起来像这样:数据= [16,17,18,20,21,22,24,25,26]

roo*_*oot 6

Data=[]如果您读取空行,则会获得一个空列表.你试图从列表中获取第一个元素Data[0],但因为它是一个空列表,它在位置0没有元素,所以你得到一个IndexError.

Data=''.split()

Data[0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-686-0792b03cbbdf> in <module>()
----> 1 Data[0]

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

这将打印Dataif IndexErrorifours - 您可以看到自己打印一个空列表:

f=open('file','r')
temp = []
for row in f.readlines():
    Data = row.split()
    try:
        temp.append(float(Data[0]))
    except IndexError:
        print Data
Run Code Online (Sandbox Code Playgroud)

您可以使用该with语句打开文件,该文件在处理后自动关闭文件.您也可以不使用而循环遍历文件本身readlines().

with open(file,'r') as f:        
     for row in f:
         Data = row.split()
         try:
            print Data[0]
         except IndexError:
            print 'You have an empty row'
Run Code Online (Sandbox Code Playgroud)

编辑:你最好使用csv模块:

import csv
with open('file.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=' ')
    print [row[0] for row in reader if len(row)]
>>> 
['16', '17', '18', '20', '21', '22', '24', '25', '26']
Run Code Online (Sandbox Code Playgroud)