Python 如何识别文件夹路径并将其删除?

Python 如何识别文件夹路径并将其删除?,python,Python,我正在做一个日志解析服务器,并收到一个完整的日志路径列表。现在我知道文件夹名称的格式必须是时间戳,如12-28-2020\u 11-34-22-026。 因为我不知道用户把日志文件夹放在哪里。如何识别文件夹路径并将其删除 INPUT: files = [ '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/log.DEBUG', '/usr/local/home/username/Down

我正在做一个日志解析服务器,并收到一个完整的日志路径列表。现在我知道文件夹名称的格式必须是时间戳,如
12-28-2020\u 11-34-22-026
。 因为我不知道用户把日志文件夹放在哪里。如何识别文件夹路径并将其删除

INPUT:
    files = [
        '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/log.DEBUG',
        '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/log.INFO',
        '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/summary.txt',
        '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/UnitTest/ResultSheet_2020-12-28_11-34-37.txt',
        '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/UnitTest/Emulator8080/logcat_emulator_8080_12-28-2020_11-34-24-826.txt',
    ]

OUTPUT:
    files = [
        '/12-28-2020_11-34-22-026/log.DEBUG',
        '/12-28-2020_11-34-22-026/log.INFO',
        '/12-28-2020_11-34-22-026/summary.txt',
        '/12-28-2020_11-34-22-026/UnitTest/ResultSheet_2020-12-28_11-34-37.txt',
        '/12-28-2020_11-34-22-026/UnitTest/Emulator8080/logcat_emulator_8080_12-28-2020_11-34-24-826.txt',
    ]
您需要检查路径的哪个(第一)部分与某个模式匹配

作为正则表达式匹配的模式:

re.compile(r'^\d{2}-\d{2}-\d{4}_\d{2}-\d{2}-\d{2}-\d{3}$')
Python的标准库
pathlib
使用
path
class'
.parts
属性具有非常强大的路径分割方法,因此您可以找到匹配项:

import re
from pathlib import Path


files = [
    '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/log.DEBUG',
    '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/log.INFO',
    '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/summary.txt',
    '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/UnitTest/ResultSheet_2020-12-28_11-34-37.txt',
    '/usr/local/home/username/Downloads/12-28-2020_11-34-22-026/UnitTest/Emulator8080/logcat_emulator_8080_12-28-2020_11-34-24-826.txt',
]


rgx = re.compile(r'^\d{2}-\d{2}-\d{4}_\d{2}-\d{2}-\d{2}-\d{3}$')

log_files = []
for fn in files:
    for i, part in enumerate(Path(fn).parts):
        if rgx.match(part):
            # str() because you're asking for strings, but could just leave them as paths
            log_files.append(str(Path(*Path(fn).parts[i:])))
            break

print(log_files)
输出:

['12-28-2020_11-34-22-026\\log.DEBUG', '12-28-2020_11-34-22-026\\log.INFO', '12-28-2020_11-34-22-026\\summary.txt', '12-28-2020_11-34-22-026\\UnitTest\\ResultSheet_2020-12-28_11-34-37.txt', '12-28-2020_11-34-22-026\\UnitTest\\Emulator8080\\logcat_emulator_8080_12-28-2020_11-34-24-826.txt']
此部分
log\u files.append(str(Path(*Path(fn).parts[i:]))
的作用是:

  • 将新结果附加到
    日志文件
  • 结果是从索引
    i
    中的
    Path(fn)
    部分创建的
    Path()
    的字符串表示形式
    str()
    Path()
    期望部分作为单独的参数,因此列表使用扩展运算符
    *
    进行扩展
  • 找到匹配项并合并并附加其余部分后,循环可以停止(
    中断
    ),因为即使模式再次出现,您也不希望它再次与该路径匹配
请注意,在您想要的结果中,所有路径都以一个
/
开头-我认为这是一个错误,因为这表明路径是从根开始的,而它们是相对于其他一些文件夹的路径。当然,如果需要,您可以添加
/