При просмотре файлов и папок, как мне сравнить текущее имя файла со следующим в python? - PullRequest
1 голос
/ 12 июля 2011

Я запускаю скрипт, который проходит через папки и файлы и использую эти очень простые циклы. Теперь мне было интересно, как я могу сравнить текущее имя файла с тем, которое идет дальше, в этом цикле?

list_of_files = {}
    for (dirpath, dirnames, filenames) in os.walk(path):
        for filename in filenames:
           print 'I know here I could print: ', filename
           print 'but how could I print: ', filename+1

Как правило, я хочу сравнить два файла, выбрать один по определенным критериям, сравнить со следующим в той же папке по этим критериям - до конца папки. В следующей папке я хотел бы сделать то же самое снова.

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

Вы можете расширить это, чтобы сделать то, что вы хотите:

>>> for a, b in zip(range(10), range(10)[1:]):
...     print a, b

вот так:

for filename, next in zip(filenames, filenames[1:]):
    print filename, next

Редактировать: я забыл о itertools .

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)
1 голос
/ 12 июля 2011

Встроенная enumerate функция нумерует итеративный и возвращает (pos, item) кортежи. Вы можете использовать это.

for pos, filename in enumerate(filenames):
    print 'I know here I could print: ', filename
    try:
         print 'but now I could print: ', filenames[pos+1]
    except IndexError:
         #there is no next item
         pass
0 голосов
/ 12 июля 2011

Вместо сравнения со следующим файлом вы можете выполнить то же самое, сравнив с предыдущим файлом:

for (dirpath, dirnames, filenames) in os.walk(path):
    lastfile = None  # Will be non-None if last file matched criterion
    for filename in filenames:
       if lastfile and criterion2(lastfile, filename):
          # do something
       lastfile = filename if criterion1(filename) else None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...