Python: переберите папку и выберите первый файл, заканчивающийся на .txt - PullRequest
0 голосов
/ 22 марта 2020

Я хочу перебрать имена файлов в определенной папке. Затем я wi sh выбираю первое имя файла, которое удовлетворяет критериям (имя файла заканчивается на «.txt»)

Должен ли я использовать For l oop и прерывать его, когда вижу окончание первого файла с .txt? Или я должен использовать Пока l oop? Пока l oop вроде не работает. Это продолжается Он продолжает печатать имя файла согласно приведенному ниже коду.

Ниже приведен код, который я использую:

import os
import pdb

asciipath = 'C:\\Users\\rmore\\Desktop\\Datalab'

x = 0

file = os.listdir(asciipath)

while file[x].endswith('.txt'):
    print(file[x])
    x = x+1

Ответы [ 3 ]

1 голос
/ 22 марта 2020

Pythoni c мог бы использовать next на генераторе:

next((f for f in file if f.endswith('.txt')), 'file not found')

Или вы можете l oop над файлами и вернуться, как только будет выполнено условие:

def find_first_txt_file(files)
    for file in files:
        if file.endswith('.txt'):
            return file
    return 'file not found'
1 голос
/ 22 марта 2020

Облегчи себе и используй pathlib и glob.

from pathlib import Path
p = Path(asciipath)
print(next(p.glob('*.txt')))
1 голос
/ 22 марта 2020

Это можно сделать с помощью l oop, но это чрезмерно усложнит код. Я бы использовал здесь для l oop. Я бы также переименовал файл в файлы, просто чтобы сделать происходящее немного более понятным.

Редактировать:

Как указывалось, предложение else для l oop могло бы сделать для

files = os.listdir(asciipath)

for file in files:
    if file.endswith('.txt'):
        print(file)
        break
else:
    print('No txt file found')

Разрыв является ключом для остановки l oop после того, как вы найдете первый файл, заканчивающийся на .txt

Также обратите внимание, что оператор else находится на для l oop а НЕ внутри l oop. Остальное будет запущено только в том случае, если оператор break не сработал.

...