web-dev-qa-db-ja.com

Pythonでreadlinesを使用していますか?初めて

データの列を含むテキストファイルがあり、これらの列を個別のリストまたは配列に変換する必要があります。これは私が今まで持っているものです

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]

8
user1762768

空の行を読み取ると、空のリスト_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が発生した場合、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']
_
6
root

ファイルハンドラーに使用します。

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

インデックスエラーは、[0]の場所でDataにアクセスしようとしたことが原因です。これは単にあなたの行が空だったことを意味します。

行を解析する前にクイックチェックを実行する必要があります...

if len(Data):
    #code
else:
    #empty line?
2
Inbar Rose
#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
0
user4816019

Data [0]またはrow [0]の使用を避け、代わりに '' .join(Data)または '' .join(row)を使用して、空のリスト(リストインデックスが範囲外エラー)を回避します。

0
kevin
f = open('data.txt', 'r')
temp = []
for row in f.readlines():
    items = row.split(',')
    temp.append(unicode(items[0]))

それがあなたの問題を解決することを願っています。

0
okan kilic
#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; 
0
user4816019
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;
0
user4730171