2012-01-13 99 views
1

我是Python中的新手,我只在第三天的語言中編程。我從Matlab轉換而來,因爲我從大學畢業,而且我承擔不起軟件的高昂費用。Python中空列表的基礎知識

我想添加幾個文件名到列表,失敗。下面是我的代碼:

import os 
    dirname = r"D:\MyFiles" 
    temp = os.listdir(dirname) 
    fl = [] 
    for fn in temp: 
     if fn.startswith('L0116'): 
      fl = fl.append(fn) 

我不明白的是,當使用[]返回的列表類型發起的,但後來我不能與上述循環追加列表的變量FL。我使用交互式提示重新檢查我的代碼,發現類型更改爲str,但未能追加更多內容。

我被困在這個,我試圖谷歌約一個小時沒有任何明確的線索,我應該如何做到這一點。

有沒有更好的方法?或者我做錯了哪一部分?

非常感謝您的幫助!

回答

2

append()方法突變了列表。您應該只是追加fn這樣的:

fl.append(fn) 

不要嘗試分配的fl.append(fn)的結果(這是None,順便說一句)

另外,不要使用r"foo"字符串的文件名。它們被設計用於正則表達式,並將它們用於文件名或其他類型的字符串會咬你。例如,你不能用反斜槓結束這樣的字符串。

+0

謝謝!畢竟概念問題。 – 2012-01-13 09:28:20

+0

但是,如果我不在前面添加r,那麼listdir函數將讀取'\'後的字符並呈現錯誤。有沒有辦法解決? – 2012-01-13 09:29:19

+1

使用'「D:\\ MyFiles」'。是的,不得不使每個路徑名分隔符加倍。考慮到反斜槓數十年來一直被用作字符串轉義字符,使用它作爲路徑名分隔符是一個非常糟糕的選擇。但是,如果你遇到MS Windows,那就是你現在所堅持的。 – Celada 2012-01-13 09:34:15

2

append工程地質儲量,因此沒有必要將其分配到列表本身(fl = fl.append(fn))只是做fl.append(fn)

+0

非常感謝你! – 2012-01-13 10:27:00

0

名單在python追加不返回一個類型,而只需調用該方法,像這樣:

import os 
dirname = r"D:\MyFiles" 
temp = os.listdir(dirname) 
fl = [] 
for fn in temp: 
    if fn.startswith('L0116'): 
     fl.append(fn) 

我還沒有測試過這個代碼,但它應該可以工作。你的邏輯每次都重置列表。

+0

非常感謝! – 2012-01-13 10:26:52

2

列表理解:

import os 
dirname = r"D:\MyFiles" 
fl = [fn for fn in os.listdir(dirname) if fn.startswith('L0116')]