2017-10-11 28 views
0

我有以下python代碼來刪除某個目錄中的文件的所有副本,只保留其中的一個。函數內引用python變量

它工作正常,如果我註釋掉delete()函數中的前四行,但如果我不這樣做,它會給我一個錯誤,即在分配之前引用局部變量list1。此外,我嘗試使用稱爲全球的東西,但它沒有幫助我太多,因爲它給出了錯誤,說它是NoneType。 請幫助我,我只是一個Python初學者。

list1 = [] 
list2 = [] 
def stripe(lis): 
    for i in range(len(lis)): 
     lis[0] = lis[0].strip() 
def scan(pat): 
    pat = os.path.abspath(pat) 
    files = os.listdir(pat) 
    for file in files: 
     filepath = os.path.join(pat,file) 
     if os.path.isfile(filepath): 
      list1.append(file) 
      list2.append('{0}'.format(filepath)) 
     elif os.path.isdir(filepath): 
      scan(filepath) 
def delete(): 
    list1_1 = stripe(list1) 
    list2_1 = stripe(list2) 
    list1 = list1_1 
    list2 = list2_1 
    length = len(list1) 
    #length = length - 1 
    i = 0 
    while i < length: 
     item = list1[0] 
     a = list1[0] 
     b = list2[0] 
     del list1[0] 
     del list2[0] 
     if item in list1: 
      try: 
       os.remove(list2[list1.index(item)]) 
       #del list1[list1.index(item)] 
       #del list2[list1.index(item)] 
      except: 
       print('sorry',list1[0],'could not be deleted',sep = ' ') 
      print('wow') 
     i += 1 
     #list1.append(a) 
     #list2.append(b) 
+0

您是否嘗試過創建[最小完全可驗證的示例](https://stackoverflow.com/help/mcve)? –

+0

您可以考慮刪除功能的前5行。因爲錯誤僅在那裏出現 –

+0

@ChiefVOLDERMORT那麼理想情況下,您將提供一個展現相同行爲的五行樣本。通常,當您將程序與問題的實質相結合時,您會發現錯誤。這是我們的工藝的一部分。 –

回答

0

global看起來像您正確的選擇,但如果你說這給了錯誤,使用首先想到的方式。 list1和list2可以是delete()函數的參數。

事情是這樣的:

def delete(list1, list2): 
    ... 

def foo(): 
    list1 = [] 
    list2 = [] 
    ... 
    delete(list1, list2) 

而且,正如我所說,global始終是一個選擇。下面是一個簡單的例子:

list = [] 

def foo(): 
    global list 
    list.append(1234) 

def foo2(): 
    global list 
    print(list) 

foo() 
foo2() 

輸出:

[1234] 
+0

當我使用全球它只是一個新的類型無變量list1,並取代了我的舊的。但第一個是非常感謝 –