我有以下格式的文件路径列表。
/media/odroid/pen/lol.mp3 (*)
/media/odroid/pen/rev1/lol2.mp3 (**)
我的目标是创建一个包含6列(dir1,dir2,dir3,dir4,dir5,name)的SQLite数据库并将这些文件路径放入其中,因此(*)和(**)看起来像(对不起)可怜的图形表示):
dir1 | dir2 | dir3 | dir4 | dir5 | name
-------------------------------------------
none | none | media|odroid| pen | lol.mp3
none |media |odroid| pen | rev1 | lol2.mp3
我目前正在使用str.split('/')
,但处理起来很复杂,因为它需要对长度进行不同的处理。我看到人们使用正则表达式,但我不确定如何做(甚至不单独),并同时将其插入数据库。有人可以为我提供指南或示例代码吗?
答案 0 :(得分:2)
正则表达式是一个选项,但为什么不使用split
?
保持简单:
path = "/media/odroid/pen/lol.mp3"
cols = path[1:].split("/")
for i in range(6-len(cols)):
cols.insert(0, "none")
# => ['none', 'none', 'media', 'odroid', 'pen', 'lol.mp3']
或使用功能
def getColsForPath(path):
cols = path[1:].split("/")
for i in range(6-len(cols)):
cols.insert(0, "none")
return cols
print(getColsForPath("/media/odroid/pen/lol.mp3"))
print(getColsForPath("/media/odroid/pen/rev1/lol2.mp3"))
答案 1 :(得分:1)
尝试使用此正则表达式:
/\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/([\w\d\.]+)$/
您必须逐个阅读路径 你将有6组结果(可能是7,一个额外的整个字符串)。除了最新的组之外,每个组都是"懒惰",这意味着组将从字符串的末尾填充。