データの列を含むテキストファイルがあり、これらの列を個別のリストまたは配列に変換する必要があります。これは私が今まで持っているものです
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
_
これにより、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']
_
ファイルハンドラーに使用します。
with open('path/to/file', 'r') as f:
for line in f:
# code.
インデックスエラーは、[0]
の場所でData
にアクセスしようとしたことが原因です。これは単にあなたの行が空だったことを意味します。
行を解析する前にクイックチェックを実行する必要があります...
if len(Data):
#code
else:
#empty line?
#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
Data [0]またはrow [0]の使用を避け、代わりに '' .join(Data)または '' .join(row)を使用して、空のリスト(リストインデックスが範囲外エラー)を回避します。
f = open('data.txt', 'r')
temp = []
for row in f.readlines():
items = row.split(',')
temp.append(unicode(items[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;
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;