Задать вопрос
@Dato38it

Как мне проигнорировать этот Подкаталог «old» и прочитать данные только из списка?

Есть папка с подкаталогами, в которых мне нужно прочитать определенные файлы по условию:
spoiler
├───BRT
├───BRY
├───CHE
├───CHV
├───EKT
├───GRN
├───HAN
├───IRK
├───IVN
├───IZH
├───KAM
├───KHA
├───KIR
├───KLG
├───KLN
├───KOM
├───KOS
├───KRA
├───KRC
├───KRG
├───KRS
├───KUR
├───LIP
├───MGD
├───MOS
├───MRD
├───MUR
├───NEN
├───NIN
├───NOV
├───NSK
├───old
│   ├───ARH
│   ├───BEL
│   ├───BRN
│   ├───BRT
│   ├───BRY
│   │   └───От радиопланеров
│   ├───CHE
│   ├───CHV
│   │   └───Old
│   ├───EKT
│   ├───HAN
│   │   └───хлам
│   ├───IRK
│   │   ├───IRK
│   │   ├───IRK_Lac_new
│   │   └───URA
│   ├───IZH
│   ├───KAZ
│   │   ├───old
│   │   └───URA
│   ├───KEM
│   ├───KHA
│   ├───KIR
│   ├───KLG
│   ├───KLN
│   ├───KOM
│   ├───KOS
│   ├───KRA
│   ├───KRG
│   │   └───OLD
│   ├───KRS
│   │   └───OLD
│   ├───KUR
│   ├───LIP
│   ├───MOS
│   │   └───old
│   ├───MRD
│   ├───MUR
│   ├───NIN
│   │   ├───URA
│   │   └───Хлам
│   ├───NOV
│   ├───NSK
│   │   └───old
│   ├───OMS
│   ├───ORB
│   ├───ORL
│   │   └───От планеров
│   ├───PNZ
│   ├───PRM
│   ├───PSK
│   ├───PZV
│   ├───ROS
│   ├───RYZ
│   ├───SAH
│   ├───SAM
│   ├───SMO
│   ├───SPB
│   ├───SRV
│   │   └───OLD
│   ├───TAM
│   │   └───URA
│   ├───TOM
│   ├───TUL
│   ├───TUM
│   │   └───old
│   ├───TVE
│   ├───TYV
│   ├───ULN
│   ├───VLA
│   ├───VLD
│   ├───VLG
│   ├───VOL
│   │   └───URA
│   ├───VRN
│   ├───YNR
│   └───YOL
├───OMS
├───ORB
├───ORL
├───PNZ
├───PRM
├───PSK
├───PZV
├───ROS
├───RYZ
├───SAH
├───SAM
├───SMO
├───SPB
├───SRV
├───SVS
├───TAM
├───TOM
├───TUL
├───TUM
├───TVE
├───TYV
├───UFA
├───ULN
├───VLA
├───VLD
├───VLG
├───VOL
├───VRN
├───YNR
├───YOL
└───YRL

В данной папке есть Подкаталог "old", который вообще мешает, из-за него куча повторяющихся файлов отображается. Также я создал список, по которому можно отсортировать какие папки можно прочитать: ['IRK','MGD','SAH','KHA','KAM'] Такой вывод отображается когда я запускаю код:
spoiler
...
IR.kml
IR.kml
IR.kml
IR.kml
IR.kml
...
RO.kml
RO.kml
RO.kml
RO.kml
RO.kml
RZ.kml
RZ.kml
RZ.kml
RZ.kml
RZ.kml
SA.kml
SA.kml
SA.kml
SA.kml
SA.kml
SR.kml
SR.kml
SR.kml
SR.kml
SR.kml
...
YR.kml
YR_ACTUAL.kml
YR.kml
YR_ACTUAL.kml
YR.kml
YR_ACTUAL.kml
YR.kml
YR_ACTUAL.kml
YR.kml
YR_ACTUAL.kml

Когда я выполняю свой код, он у меня всю папку почему-то сканирует, хотя я в условии писал без old.
if (i in listreg) and (i != "old"):
И почему то программа дублирует аж 5 раз, на примере IR.kml. Как мне проигнорировать этот Подкаталог "old" и прочитать данные только из этого списка ['IRK','MGD','SAH','KHA','KAM']? Вот фрагмент кода:
netpath = "data/"
        listreg=['IRK','MGD','SAH','KHA','KAM']
        listnetfiles = []
        listnetdirs = []
        needdir=[]
        for root, dirs, files in os.walk(netpath):
            #print(dirs) 
            listnetdirs.append(dirs)
        #print(listnetdirs[0])        
            for i in listnetdirs[0]:
                #print(i)
                #with open("output.txt", "a") as outfile:
                #    outfile.write(i+"\n")
                if (i in listreg) and (i != "old"):
                    #print(i)
                    needdir.append(i)
                    needdir = list(dict.fromkeys(needdir))
                    #print(needdir)
                    for kmlfile in files:
                        print(kmlfile)
                        #if prefixs[0] in kmlfile:
                else:
                    continue
        #print(needdir)

Может быть как то можно вообще переделать код по считыванию определенных файлов в папке? Мне допустим надо будет прочитать файл IR.kml в папке IRK. проблема в том что он есть в папке old еще. поэтому папку old хочу проигнорировать. а как это сделать без дополнительных библиотек?
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Простой 9 комментариев
Решения вопроса 2
Lord_of_Rings
@Lord_of_Rings Куратор тега Python
Дунадан - северный странник. Злой, но очень добрый
Ну если я правильно понял, то:
import os

path = "data/"
list_dir=['IRK','MGD','SAH','KHA','KAM']
for root_dir in list_dir:
    for root, dirs, files in os.walk(os.path.join(path, root_dir)):
        for kmlfile in files:
            print(kmlfile)
Ответ написан
Vindicar
@Vindicar
RTFM!
from pathlib  import Path # входит в поставку питона, не сторонняя

base_path = Path("data")  # путь до каталога с данными
for item in base_path.glob('*'):
  if item.is_dir() and item.stem != 'old':
    # тут что-то делаем с путём item. Например:
    for kml_file in item.glob('*.kml'):
      print(kml_file.resolve())  # выводим полный путь к файлу
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
02 февр. 2025, в 00:25
5000 руб./за проект
02 февр. 2025, в 00:18
1000 руб./за проект
01 февр. 2025, в 23:26
100000 руб./за проект