Вывести список файлов в каталоге, имеющем более одного пробела - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть этот код:

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 пробела между A и h.

Я знаю, что будет указан один пробел, но не несколько пробелов

Даже ls не будет перечислять файлы, используя ls/*.png Любая помощь приветствуется

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

Попробуйте сделать это, чтобы увидеть, действительно ли файл находится там - возможно (как предположил Свен), есть пробел или какой-то другой символ после ".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 голосов
/ 29 февраля 2012

Ваша команда ls должна быть: ls *.png.Если вы действительно использовали косую черту, неудивительно, что она не работает.

Я бы проверил, верен ли ваш ftpUploaddir: находит ли ваш скрипт какие-либо файлы при запуске?При правильном пути ваш скрипт должен работать как написано.

Кстати, легче найти файлы с определенным расширением, например так:

import glob, os
for f in glob.glob(os.path.join(ftpUploaddir, "*.png")):
    print f
0 голосов
/ 29 февраля 2012

Я пытался использовать модуль 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 голосов
/ 29 февраля 2012

Я не могу воспроизвести эту проблему. Попробуйте запустить этот скрипт 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())

Для меня это всегда печать True.

...