2012-02-29 62 views
0

我有這樣的代碼:列出文件

for f in os.listdir(ftpUploaddir): 
    if os.path.isfile(os.path.join(ftpUploaddir,f)): 
     #Filter files having .png as extension 
     if f[-4:] == ".png": 
      print "from directory", f 

它沒有列出有諾雷的文件不是一個空格,如:

100002044_A h_HD_XXX_20120229_141236.png 

有3位在Ah之間。

我知道一個空間將被列出,但不是多個空格

即使ls不會列出使用ls/*.png文件任何幫助表示讚賞

+1

如果我做'觸摸「測試文件」; ls test *'文件顯示正常,所以ls對這些文件沒有問題。 – Roadmaster 2012-02-29 16:28:37

+0

適合我。你的文件系統似乎不知何故被打破。或者''.png'之後還有另一個不可打印的字符? – 2012-02-29 16:30:03

+0

你使用什麼操作系統?你確定*你期望找到的文件實際存在嗎?也就是說,你可以做一個「ls -l」(或者你正在使用的任何操作系統上的一些等價物)來顯示文件嗎? – 2012-02-29 16:32:03

回答

0

我不能重現此問題。嘗試運行這個Python腳本:

# create a file with multiple spaces in the name 
outf = open("100002044_A h_HD_XXX_20120229_141236.png", "w") 
outf.write("hello, world") 
outf.close() 

# see if os.listdir can find it 
import os 
print "100002044_A h_HD_XXX_20120229_141236.png" in os.listdir(os.getcwd()) 

對我來說,它總是打印真實。

1

嘗試這樣做以查看文件是否真的存在 - 也許(正如Sven所建議的)在「.png」之後有空格或其他字符?

for f in os.listdir(ftpUploaddir): 
    if "h_HD_XXX_20120229_141236" in f 
     print "Full name is %r" % f 
     if not os.path.isfile(os.path.join(ftpUploaddir,f)): 
      print " (but it's not a file?)" 
+0

謝謝你們!對不起,我會說一個非常愚蠢的錯誤。你是對的** @ Sven **實際上生成的文件在名稱和png之間有空格,因此不會被列出。 – 2012-02-29 16:43:42

0

我試過使用fnmatch模塊,但不能重現問題。

>>> import os 
>>> import fnmatch 
>>> os.listdir(r'C:\Users\RanRag\python\test') 
['gameicon.png', 'grass i test.png', 'hello.txt'] 

>>> for file in os.listdir(r'C:\Users\RanRag\python\test'): 
...   if fnmatch.fnmatch(file , '*.png'): 
...        print file 
... 
gameicon.png 
grass i test.png 
>>> 
0

您的ls命令應該是:ls *.png。如果你真的使用了斜線,這並不奇怪,它不起作用。

我會檢查您的ftpUploaddir是否正確:您的腳本在運行時是否發現任何文件?如果路徑正確,你的腳本應該像書面一樣工作。

順便說一句,這是更容易找到帶有特定擴展名像這樣的文件:

import glob, os 
for f in glob.glob(os.path.join(ftpUploaddir, "*.png")): 
    print f