【问题标题】:Monitor dir content and add files to list监控目录内容并将文件添加到列表
【发布时间】:2017-07-27 08:07:27
【问题描述】:

有一个服务器,每 15 秒将一个 .csv 文件拉入其中。每隔几天,我想读取所有新的 .csv 文件并将数据附加到 .h5 文件中。我的所有部分都工作得很好,我缺少的小麦是一种定义要查看的文件的有效方法。在我跑步的那一刻:

all_files = []
root = "//server/dir/"
for path, subdirs, files in os.walk(network_location):
    for name in files:
        all_files.append(os.path.join(path, name))

目录结构如下:

year
 ¦ 
 months ...
  ¦ 
  days ...

现在包含自 2 月以来的数据,并且 os.walk() 需要很长时间。有没有办法让它只遍历不在all_files 中的文件?

我看过watchdog,但不太明白如何使它适用于这种情况。还有其他软件包或方法吗? all_files 应该只是一个字符串列表。

【问题讨论】:

    标签: python list directory monitoring


    【解决方案1】:

    简单版:
    目录结构如下:

    tmp  
      ¦  
      file1.txt  
      file2.txt   
    

    代码:

    import os
    dir_path = r'E:\download\tmp'
    only_file=[dir_path+'\\'+name for name in os.listdir(dir_path) if os.path.isfile(dir_path+'\\'+name) ]
    only_file
    

    输出:
    ['E:\download\tmp\file1.txt', 'E:\download\tmp\file2.txt']

    完整版:
    目录结构如下:

    tmp\2017\1\1\
      - 20170101_1.txt'
      - 20170101_2.txt'
    tmp\2017\1\2\
      - 20170102_1.txt'
      - 20170102_2.txt'
    

    方法1:
    代码:

    import os
    dir_path = r'E:\download\tmp'
    file_list=[]
    for dirPath, dirNames, fileNames in os.walk(dir_path):
        for f in fileNames:
            file_list.append(os.path.join(dirPath, f))
    file_list
    

    输出:

    ['E:\\download\\tmp\\2017\\1\\1\\20170101_1.txt',
     'E:\\download\\tmp\\2017\\1\\1\\20170101_2.txt',
     'E:\\download\\tmp\\2017\\1\\2\\20170102_1.txt',
     'E:\\download\\tmp\\2017\\1\\2\\20170102_2.txt']
    

    方法2:

    代码:

    import os
    file_list=[]
    dir_path = r'E:\download\tmp'
    only_dir_year=[dir_path+'\\'+name for name in os.listdir(dir_path) if os.path.isdir(dir_path+'\\'+name) ]
    for year_dir in only_dir_year:
        only_dir_month=[year_dir+'\\'+name for name in os.listdir(year_dir) if os.path.isdir(year_dir+'\\'+name) ]
        for month_dir in only_dir_month:
            only_dir_day=[month_dir+'\\'+name for name in os.listdir(month_dir) if os.path.isdir(month_dir+'\\'+name) ]
    for day_dir in only_dir_day:
        tmp=[day_dir+'\\'+name for name in os.listdir(day_dir) if os.path.isfile(day_dir+'\\'+name) ]
        file_list=file_list+tmp
    file_list
    

    输出:

    ['E:\\download\\tmp\\2017\\1\\1\\20170101_1.txt',
     'E:\\download\\tmp\\2017\\1\\1\\20170101_2.txt',
     'E:\\download\\tmp\\2017\\1\\2\\20170102_1.txt',
     'E:\\download\\tmp\\2017\\1\\2\\20170102_2.txt']
    

    【讨论】:

    • 虽然我很欣赏这种努力,但恐怕方法 1 就是我所拥有的,这就是问题所在。它遍历整个目录,而不仅仅是新文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多