使用Python打破要在SQLite数据库的列中使用的文件的路径?

时间:2017-04-18 14:09:56

标签: python regex sqlite sqlalchemy

我有以下格式的文件路径列表。

/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('/'),但处理起来很复杂,因为它需要对长度进行不同的处理。我看到人们使用正则表达式,但我不确定如何做(甚至不单独),并同时将其插入数据库。有人可以为我提供指南或示例代码吗?

2 个答案:

答案 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"))

Demo

答案 1 :(得分:1)

尝试使用此正则表达式:

/\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/?([\w\d]+)??\/([\w\d\.]+)$/

您必须逐个阅读路径 你将有6组结果(可能是7,一个额外的整个字符串)。除了最新的组之外,每个组都是"懒惰",这意味着组将从字符串的末尾填充。