перебор определенных файлов в папке с шаблоном сопоставления имен в python

#python #csv #filenames

Вопрос:

У меня есть папка с большим количеством csv-файлов с разными именами. Я хочу работать только с файлами, имя которых состоит только из чисел, хотя у меня нет информации о диапазоне чисел в названии файлов.

например, у меня есть ['123.csv', 'not.csv', '75839.csv', '2.csv', 'bad.csv', '23bad8.csv'] , и я хотел бы работать только с ['123.csv', '75839.csv', '2.csv']

Я попробовал следующий код:

 for f in file_list:
    if f.startwith('1' or '2' or '3' ..... or '9'):
        # do something
 

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

Ответ №1:

Вы можете использовать Regex для выполнения следующих действий:

 import re
lst_of_files = ['temo1.csv', '12321.csv', '123123.csv', 'fdao123.csv', '12312asdv.csv', '123otk123.csv', '123.txt']
pattern = re.compile('^[0-9] .csv')
newlst = [re.findall(pattern, filename) for filename in lst_of_files if len(re.findall(pattern, filename)) > 0]
print(newlst)
 

Ответ №2:

Вы можете сделать это таким образом:

 file_list = ["123.csv", "not.csv", "75839.csv", "2.csv", "bad.csv", "23bad8.csv"]
for f in file_list:
    name, ext = f.rsplit(".", 1)    # split at the rightmost dot
    if name.isnumeric():
        print(f)
 

Выход есть

 123.csv
75839.csv
2.csv
 

Ответ №3:

Один из подходов:

 import re
lst_of_files = ['temo1.csv', '12321.csv', '123123.csv', 'fdao123.csv', '12312asdv.csv', '123otk123.csv', '123.txt', '876.csv']
for f in lst_of_files:
    if re.search(r'^[0-9] .csv', f):
        print (f)
 

Выход:

 12321.csv
123123.csv
876.csv