Создание списка отсутствующих файлов после чтения путей из другого списка - PullRequest
0 голосов
/ 02 июля 2019

У меня есть список путей к файлам listt:

['/data0/river_routes.nc',
 '/dat/rho0_profile.nc',...]

Я хочу проверить, существуют ли они, а если нет - создать список list1, содержащий только пути к отсутствующим файлам.

Я могу создать list1 полный True/False, используя:

import os,time
list1 = []
for file in listt:
    list1.append(os.path.isfile(file))

Но я не уверен, как наиболее эффективно создать список отсутствующих путей

Ответы [ 4 ]

2 голосов
/ 02 июля 2019

Вам нужно добавить путь, а не bool, который возвращает isfile.

from os.path import isfile

paths = ['/data0/river_routes.nc', '/dat/rho0_profile.nc',...]

missing_paths = []
for path in paths:
    if not isfile(path):
        missing_paths.append(path)

Это также можно сделать с помощью понимания списка:

missing_paths = [path for path in paths if not isfile(path)]

Или вы можете использовать itertools.filterfalse:

from itertools import filterfalse as ffilter
missing_paths = list(filter(ispath, paths))
2 голосов
/ 02 июля 2019

Попробуйте это:

from pathlib import Path

if __name__ == '__main__':
    paths = ['/data0/river_routes.nc',
             '/dat/rho0_profile.nc']
    missing = []
    for item in paths:
        p = Path(item)
        if not p.exists():
            missing.append(item)

1 голос
/ 02 июля 2019

Просто вычтите множество найденных из всех:

import os
path = 'path/to/directory'
listt = ['/data0/river_routes.nc',
         '/dat/rho0_profile.nc',...]
all = set(listt)
found = set(os.listdir(path))
missing = list(all - found)
1 голос
/ 02 июля 2019

Вы можете использовать понимание списка

import os

not_exists = [f for f in list1 if not os.path.exists(f)]

где list1 - список с путями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...