我有一个包含数据列的文本文件,我需要将这些列转换为单独的列表或数组。 这就是我到目前为止所拥有的
f = open('data.txt', 'r')
temp = []
for row in f.readlines():
Data = row.split()
temp.append(float(Data[0]))
当我运行时,我得到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
我需要第一列,如果可能的话,看起来像这样: 数据= [16,17,18,20,21,22,24,25,26]
答案 0 :(得分:5)
如果您读取空行,则会获得一个空列表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
这将打印出Data
if IndexError
成就 - 您可以看到它打印出一个空列表:
f=open('file','r')
temp = []
for row in f.readlines():
Data = row.split()
try:
temp.append(float(Data[0]))
except IndexError:
print Data
您可以使用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'
编辑:你最好使用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']
答案 1 :(得分:2)
用于文件处理程序。
with open('path/to/file', 'r') as f:
for line in f:
# code.
您的索引错误来自于尝试访问Data
位置的[0]
。
这只是意味着你的行是空的。
你应该在解析这条线之前快速检查......
if len(Data):
#code
else:
#empty line?
答案 2 :(得分:0)
f = open('data.txt', 'r')
temp = []
for row in f.readlines():
items = row.split(',')
temp.append(unicode(items[0]))
我希望它能解决你的问题。
答案 3 :(得分:0)
def cal(num_list):
x = 1;
z = 0;
while True:
list1 = list(str(x))
list2 = [int(a) for a in list1]
for i in range(len(list2)):
for j in range(10):
if(list2.count(j) > num_list[list2[i]]):
z = 1;
break;
if(z == 1):
save(x);
break;
x = x + 1;
答案 4 :(得分:0)
#matrix A to B
def show():
global string_final,list_2,tot
index=matrix_1.index(num) # finding index of num
length=n
j=(index)%length # the column positon
i=index/length # the row position
list_1=[]
for a in range(length):
lis=[]
for b in range(length):
lis.append(matrix_1.pop(0)) #pop the first element and append the list
list_1.append(lis)
tot=0
list_2=[]
for a in range(i+1):
for b in range(j+1):
tot=tot+list_1[a][b] # add the numbers
list_2.append(list_1[a][b]) #append to list
if(b!=length):
list_2.append(" ") #append space
list_2.append("\n")
string_final="".join([str(a) for a in list_2]) #list to string
print "matrix B\n",string_final,"\nx: ",str(num),"\nn: ",str(n)+"\ntotal: "+str(tot) # print the result
答案 5 :(得分:0)
#matrix add zero
def get():
global b_no
num_list=[];
file=open("matrix.txt","r");
for i in file:
b_no=0
if(len(i.split())==1): #check length is 1 or not
n=int(i)#string to int
else:
temp=i.split();
if(len(temp)!=n):
b_no+=1
break
temp=[0]+[int(a) for a in temp]+[0] #add zero at first and last
num_list.append(temp);
zero_list=[]
for i in range(n+2):
zero_list.append(0) #append zero
num_list.insert(0,zero_list)
num_list.insert(n+1,zero_list)
return num_list,n;
答案 6 :(得分:0)
我会避免使用Data [0]或row [0],而是使用&#39;&#39; .join(数据)或&#39;&#39; .join(行)来避免空列表(列表索引超出范围错误)。