首页 > 解决方案 > 文件是否存在通过匹配列表中的文件名

问题描述

我在文件夹和子文件夹中有文件。文件夹结构是这样的

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

我很难以开放的方式在这里给出路径。另请注意,我存储在文件夹中的文件名最后有日期,因此需要在路径中处理该问题,以便对于文件名末尾的任何日期,如果文件夹在列表中带有名称的文件,那么可以什么都不做,但如果文件是在子文件夹中丢失,然后打印路径中不存在的 EXCEPT 文件。注意每个文件夹必须携带所有4个文件,如果没有则返回除外。

标签: pythoncsvos.path

解决方案


一种可能的方法:

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)

推荐阅读