Задать вопрос
@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 хочу проигнорировать. а как это сделать без дополнительных библиотек?
  • Вопрос задан
  • 128 просмотров
Подписаться 1 Простой 9 комментариев
Решения вопроса 2
Lord_of_Rings
@Lord_of_Rings
Северный странник. Злой, но добрый
Ну если я правильно понял, то:
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())  # выводим полный путь к файлу
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы