【问题标题】:Extract Directory Names from Dynamic File Paths in Python从 Python 中的动态文件路径中提取目录名称
【发布时间】:2015-07-15 20:12:00
【问题描述】:

有没有办法在 Python 中通过使用REGEXgroup()os.path 来提取每个文件目录和Windows 文件路径中的文件?

我正在处理具有不同数量目录的文件路径,因此一行可能是D:\dir1\file.txt,而下一行可能是Z:\dir1\dir2\dir3\dir4\dir5\file.txt,所以我想知道是否有办法使用@987654327 来做到这一点@ 或 Python 中的内置函数,当我正在搜索的文本中有不同数量的 \ 时。

任何见解都会有所帮助,即使这只是无法做到的苦涩事实。

编辑后:

我正在尝试提取\ 和最终file.txt 之间的目录名称,并将每个dirfile 写入输出文本文件中它自己的列。

以上两行我想要的输出是:

 col1|col2|col3|col4|col5|col6
 dir1|dir2|dir3|dir4|dir5|file.txt
 dir1|    |    |    |    |file.txt

我知道os.path 有很多很好的内置函数,但是在阅读了这个网站:https://docs.python.org/2/library/os.path.html 之后,我认为他们中的任何一个都没有做我想做的事情。

【问题讨论】:

  • 你到底想提取什么?也就是说,鉴于您的第二个示例 (Z:\dir1\dir2\dir3\dir4\dir5\file.txt),您到底想要什么?
  • extract each file directory and the file 是什么意思?您想将它们单独存储在列表中吗?你能显示想要的输出吗?
  • @larsks 请查看已编辑的问题
  • @Kamehameha 我想在dir 名称和文件名之间使用反斜杠` as well as the file name and write each element to it's own column by having a bar |` 之间的每个目录名称。我会将它们写入输出文件| 分隔。所需的输出在上面已编辑的问题中进行了描述。

标签: python regex regex-group os.path


【解决方案1】:

您可以使用以下方法分隔文件名和目录:

splitFilePath = filePath.rsplit (']\', 1)
directory = splitFilePath [0]
fileName = splitFilePath [1]

您可以使用以下方法获取所有由 '\' 分隔的块:

chunks = filePath.split (r'\')

然后,您可以通过使用切片来取出特定的块,并使用连接将它们的子集粘合在一起。

使用您在已编辑问题中添加的列假定您知道确定列数的最长路径:

  • 如上所述使用拆分功能进行拆分
  • 查找最长列表的长度
  • 在所有列表中插入空字符串,但在最后一个元素之前插入最长的字符串以使列表长度相等
  • 使用“|”加入它们使用连接函数

回应您的评论:

运行以下程序

filePath = r'E:\dir1\Logs\dir2\1998-12-23\message.txt'
splitFilePath = filePath.rsplit ('\\', 1)
directory = splitFilePath [0]
fileName = splitFilePath [1]
print directory
print fileName

作为输出给出

E:\dir1\Logs\dir2\1998-12-23
message.txt

所以 '\\' 而不是 rsplit 中的 '\'。

【讨论】:

  • 当我对字符串 E:\dir1\Logs\dir2\1998-12-23\message.txt 运行 filename2 = splitFilePath[1] 时,我收到以下错误:IndexError: list index out of range。此外,搜索 ` 的正则表达式是 (r'\\')
  • 我已经更正并测试了这个例子,不要使用 r'\\' 而只是 '\\'。
  • 太棒了!它有效,当我print(directory.split("\\") 时得到以下输出:['E:', 'dir1', 'Logs', 'dir2', '1998-12-23']
猜你喜欢
  • 2011-12-11
  • 2012-10-04
  • 1970-01-01
  • 2011-09-01
  • 2011-02-01
  • 2011-01-02
  • 2012-03-05
  • 1970-01-01
相关资源
最近更新 更多