簡體   English   中英

在python中使用readlines? 第一次

[英]Using readlines in python? First time

我有一個包含數據列的文本文件,我需要將這些列轉換為單獨的列表或數組。 這就是我到目前為止所擁有的

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]

如果您讀取空行,則會獲得一個空列表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

如果IndexError出現,這將打印出Data - 您可以看到它打印一個空列表:

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']

用於文件處理程序。

with open('path/to/file', 'r') as f:
    for line in f:
        # code.

您指數錯誤來自試圖訪問Data[0]位置。 這只是意味着你的線是空的。

你應該在分析線之前快速檢查一下......

if len(Data):
    #code
else:
    #empty line?
f = open('data.txt', 'r')
temp = []
for row in f.readlines():
    items = row.split(',')
    temp.append(unicode(items[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;
#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
#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; 

我會避免使用Data [0]或row [0],而是使用''.join(Data)或'.join(row)來避免空列表(列表索引超出范圍錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM