在Python中从动态文件路径提取目录名

在Python中从动态文件路径提取目录名,python,regex,regex-group,os.path,Python,Regex,Regex Group,Os.path,Python中是否有方法通过使用REGEX和group()或os.path提取windows文件路径中的每个文件目录和文件 我处理的文件路径有不同数量的目录,因此一行可以是D:\dir1\file.txt,而下一行可以是Z:\dir1\dir2\dir3\dir4\dir5\file.txt,所以我想知道,当我正在搜索的文本中有不同数量的\时,是否有一种方法可以使用REGEX或Python中的内置函数来实现这一点 任何洞察都是有帮助的,即使这只是一个痛苦的事实,它无法做到 编辑后: 我试图提取\

Python中是否有方法通过使用
REGEX
group()
os.path
提取windows文件路径中的每个文件目录和文件

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

任何洞察都是有帮助的,即使这只是一个痛苦的事实,它无法做到

编辑后:

我试图提取
\
和最终的
file.txt
之间的目录名,并将每个
目录或
文件写入输出文本文件中自己的列

我希望上述两行的输出为:

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

我知道
os.path
有很多很好的内置函数,但是在阅读了这个网站之后,我认为它们中没有一个是我想做的。

你可以使用以下命令来分离文件名和目录:

splitFilePath = filePath.rsplit (']\', 1)
directory = splitFilePath [0]
fileName = splitFilePath [1]
chunks = filePath.split (r'\')
您可以使用以下命令获得所有由“\”分隔的块:

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中的“\\”而不是“\”。

您到底想提取什么?也就是说,给出第二个示例(
Z:\dir1\dir2\dir3\dir4\dir5\file.txt
),您到底想要什么?提取每个文件目录和文件是什么意思?是否要将它们单独存储在列表中?您能显示所需的输出吗?@larsks请查看已编辑的question@Kamehameha我想在反斜杠
`和文件名之间取每个目录名,并通过在
目录名和文件名之间有一个条
|`将每个元素写入它自己的列。我将把它们写入输出文件
|
分隔符。所需的输出在上面编辑的问题中进行了描述。当我对字符串
E:\dir1\Logs\dir2\1998-12-23\message.txt运行
filename2=splitFilePath[1]
时,我得到以下错误:
索引器:列表索引超出范围
。另外,search a
`
的正则表达式是
(r'\\')
我已经更正并测试了这个示例,不要使用r'\\',只使用'\\'。太棒了!当我打印(directory.split(“\\”)
时,我得到了以下输出:
['E:','dir1','Logs','dir2','1998-12-23']