列出具有多个空格的目录中的文件

时间:2012-02-29 16:19:57

标签: python file-handling

我有这段代码:

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

Ah之间有3个空格。

我知道会列出单个空格但不会列出多个空格

即使ls也不会使用ls/*.png列出文件任何帮助

4 个答案:

答案 0 :(得分: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?)"

答案 1 :(得分: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())

对我来说,它始终是真实的。

答案 2 :(得分: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
>>>

答案 3 :(得分:0)

你的ls命令应该是:ls *.png。如果你真的使用斜线,那就不行了。

我会检查您的ftpUploaddir是否正确:您的脚本在运行时是否找到任何文件?使用正确的路径,您的脚本应该按照书面形式工作。

顺便说一句,找到具有特定扩展名的文件会更容易:

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