2017-09-08 1 views
0

함수에 추가 한 큰 목록 dataset[i][0]이 있습니다.함수 외부에서 X 함수의 추가 목록에 액세스하려고 시도했습니다.

지금은 기능 밖에서 dataset[i][0] 목록에 액세스하려고했으나 이것이 가능한지 확실하지 않습니다. 액세스하려고 할 때 정의되지 않은 오류가 발생합니다.

엑셀 파일에 데이터 목록을 쓸 수 있도록 액세스해야합니다.

coOrd = [[1671, 2234], [1671, 2235]] 


#Create a workbook and add a worksheet. 
workbook = xlsxwriter.Workbook('Testing.xlsx') 
worksheet = workbook.add_worksheet('Test1') 

# Add a bold format to use to highlight cells. 
bold = workbook.add_format({'bold': 1}) 


#Write data headers 
row=0 
col=0 
image_start = 1768 # 1770-2 because k start from 2 

title = ['No.', 'Hue', 'Saturation', 'Value', 
    'Lightness', 'AComponent', 'BComponent', 
    'Blue Channel', 'Green Channel', 'Red Channel'] 

for j, t in enumerate(title): 
    worksheet.write(row + 1, col + j, t, bold) 

for k in range(2, 101): 
    worksheet.write(row + k , col , 'IMG_%d'%(k + image_start), bold)  

for z, t in enumerate(dataset[0][0]): 
    worksheet.write(row + z + 2 , col + 1 , dataset[0][0]) 


worksheet.set_column(0, 0, 15) 
worksheet.set_column('B:J', 13) 
worksheet.set_column(10, 10, 15) 
worksheet.write(row, col, 'Point 1: Coordinate[1671, 2234]', bold) 
worksheet.write(row, col + 11, 'Point 2: Coordinate[1671, 2235]', bold) 

workbook.close() 

def pointCollector(coOrds): 
    """Iterates through all images in the path and loop limits and co-ordinates 

    Keyword arguments: 
    coOrd -- List of co-ordinates in [x,y] format 

    """ 
    dataset = [[[] for i in range(9)] for j in range(len(coOrd))] # Declares a 9 * len(coOrd) 2D array for storage 
                    # [[H,S,V,L,A,B],...,n] 
    for i in range(0,len(coOrd)): # Iterates through co-ordinates 
     print("Working on: "+ str(coOrd[i]))                 
     for j in range(1770, 1869): # Iterates through images 
      print("Working on Images %d:"%(j)) 


      im_file = path + 'Cropped_Aligned_IMG_' + str(j) + '.png' 
      im = cv2.imread(im_file) 
      im1 = im.copy() 
      im = im.astype(np.float32)     
      im *= 1./255 

      dataset[i][0].append(HSV(im, coOrd[i][0], coOrd[i][1], 0)) #H 
      dataset[i][1].append(HSV(im, coOrd[i][0], coOrd[i][1], 1)) #S 
      dataset[i][2].append(HSV(im, coOrd[i][0], coOrd[i][1], 2)) #V 
      dataset[i][3].append(LAB(im, coOrd[i][0], coOrd[i][1], 0)) #L 
      dataset[i][4].append(LAB(im, coOrd[i][0], coOrd[i][1], 1)) #A 
      dataset[i][5].append(LAB(im, coOrd[i][0], coOrd[i][1], 2)) #B 
      dataset[i][6].append(BGR(im1, coOrd[i][0], coOrd[i][1], 0)) #Blue 
      dataset[i][7].append(BGR(im1, coOrd[i][0], coOrd[i][1], 1)) #Green 
      dataset[i][8].append(BGR(im1, coOrd[i][0], coOrd[i][1], 2)) #Red 

    return dataset 

첫 번째 함수에서 데이터 집합에 액세스하려고하면이 오류가 발생합니다.

>>> 
========= RESTART: C:\Users\310293649\Desktop\PlotWhiteRegion_7_9.py ========= 
Traceback (most recent call last): 
    File "C:\Users\310293649\Desktop\PlotWhiteRegion_7_9.py", line 41, in <module> 
    for z, t in enumerate(dataset[0][0]): 
NameError: name 'dataset' is not defined 
>>> 

나는이 Accessing List from outside function를 찾았지만 그 같은 일이 있는지 확실하지 않습니다,하지만 잘 나 또한 정말 제안 된 솔루션을 이해 해달라고.

+1

절대로 함수를 호출하지 않습니다. 'dataset'을 반환하므로 결과를 변수에 할당하고 사용해야합니다. – Barmar

답변

1

함수를 호출하고 반환 값을 사용해야합니다.

dataset = pointCollector(coOrd) 
for z, t in enumerate(dataset[0][0]): 
    worksheet.write(row + z + 2 , col + 1 , dataset[0][0]) 
+0

"dataset = pointCollector (coOrd) NameError : name 'pointCollector'가 정의되지 않았습니다." – SacreD

+0

함수를 사용하기 전에 함수를 정의해야하므로 함수 정의를 스크립트의 맨 위로 이동해야합니다. – Barmar

+0

아아 캔트는 이걸 잊어 버린 것 같아 ..... 고마워! – SacreD

관련 문제