файл существует или не соответствует имени файла в списке - PullRequest
0 голосов
/ 27 марта 2020

У меня есть файлы в папках и подпапках. структура папок такая:

2020(folder)
-01(sub folder)
--14(sub-sub folder)
----abc1-2020-01-14.csv
----abc2-2020-01-14.csv
-02(subfolder in 2020)
--17(sub-sub folder in 02)
----abc1-2020-02-17.csv
----abc4-2020-02-17.csv

У меня есть список имен файлов. li = ['abc1', 'abc2', 'abc3', 'abc4']

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

import glob
BASE_PATH = r'2020/'
allin= BASE_PATH + '/*/*'
li = ['abc1','abc2','abc3','abc4']
print('Names of files:')
for name in glob.glob(allin):
    print('\t', name)
    for k in li:
        try:
            f = open(r"C:\\Users\\Karar\\ProjectFiles\\scripts\\"+ name + "\\" + k + "*.csv")
        except IOError:
            print(name+k+ ".csv""File not present")

print name is returning 2020\01\14 and 2020\02\17

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

1 Ответ

0 голосов
/ 27 марта 2020

Один из возможных подходов:

import glob, os.path
base = '2020'
li = ['abc1','abc2','abc3','abc4']
for dirname in glob.glob(base + '/*/*'):
  year, month, day = dirname.split('/')
  for prefix in li:
      filename = "{}/{}.csv".format(dirname, '-'.join(prefix, year, month, day))
      if not os.path.exists(filename):
          print(filename)
...