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()
进行扩展*
- 找到匹配项并合并并附加其余部分后,循环可以停止(
),因为即使模式再次出现,您也不希望它再次与该路径匹配中断
/
开头-我认为这是一个错误,因为这表明路径是从根开始的,而它们是相对于其他一些文件夹的路径。当然,如果需要,您可以添加/