如何在python中将文件路径和文件名拆分为组件?

如何在python中将文件路径和文件名拆分为组件?,python,Python,我想拆分“C:\My Work\Tester Related\A\u B\u C.txt” Python中的[C:\,我的工作,与测试人员相关的,A,B,C,txt] 我刚开始学习Python。我确实导入了os.path模块,并使用 交互式提示中的某些函数无法执行,但无法获得所需的结果。 谢谢你的帮助。我可以使用os.path.basename获取文件,但无法根据给定的分隔符“\u1”将文件拆分为组件 original_path = "C:\My Work\Tester Related\A_B_

我想拆分“C:\My Work\Tester Related\A\u B\u C.txt” Python中的[C:\,我的工作,与测试人员相关的,A,B,C,txt]

我刚开始学习Python。我确实导入了os.path模块,并使用 交互式提示中的某些函数无法执行,但无法获得所需的结果。 谢谢你的帮助。我可以使用os.path.basename获取文件,但无法根据给定的分隔符“\u1”将文件拆分为组件

original_path = "C:\My Work\Tester Related\A_B_C.txt"

# Must quote the backslash in this case.
split_path = original_path.split("\\")

# At this point, split_path looks like:
# ['C:', 'My Work', 'Tester Related', 'A_B_C.txt']

split_filename = split_path[-1].split("_")
# split_filename is ['A', 'B', 'C.txt']

split_ext = split_filename[:-1].split(".")
# split_ext is ['C', 'txt']

split_filename = split_filename[:-1] + split_ext
# split_filename is ['A', 'B', 'C', 'txt']

split_path = split_path[:-1] + split_filename
# ['C:', 'My Work', 'Tester Related', 'A', 'B', 'C', 'txt']
这有点粗糙,但它会工作。

一个丑陋的双层衬里

import itertools
txt = r"C:\\My Work\\Tester Related\\A_B_C.txt"

result = list(itertools.chain(*map(lambda x: x.split('_'), txt.split(os.path.sep))))
result = result[:-1] + list(os.path.splitext(result[-1]))
一个更好的方法是使用
re
,就像@PaedricCunningham在他的回答中所做的那样

re.split(r"\\|\.|_", txt)

听起来像是
拆分(文件名,”
的作业。但您希望它在几个分隔符上分开。首先考虑使用<代码>操作系统>路径> <代码> > <代码> >代码>。然后您将有一个规范化的路径“C:\My Work\Tester Related\a\B\C.txt”。可以先分离文件路径和文件名,然后根据各自的分隔符将每个组件拆分为组件。完成所有工作不需要一步。:)你用的是什么版本?如果你在3.x上,你可以使用
*
解包
拆分
对不起,我没有提到,但我在Win 7 proThanks上使用的是3.4.1版。但是split函数是否可以将整个文件路径作为参数,并使用给定的分隔符进行分割?或者我必须定义一个新变量/对象并为其指定文件路径,然后在此对象上使用split方法,其中split方法的参数仅为分隔符?嗨,Murchak,split函数一次只能拆分一个元素。然而,你可以使用Padraic的优秀答案,以更简洁的方式做你想做的事情。谢谢Adam。有趣!我简要地浏览了使用lambda方法定义函数的过程。我会尽力理解你的代码,看看它是如何工作的。@Murchak这是一堂有趣的学术课,但不要这样写代码。无法读取。我尝试过,但出现无效语法错误。我确实先导入了itertools,然后按照建议的方式键入,得到了语法error@Murchak再试一次。我意识到我犯了几个错误,并在你上次发表评论时编辑了一些内容:)我得到了语法错误:>>>>s=“C:\My Work\Tester Related\A\u B\u C.txt”>>>>打印重新拆分(r“\\\\\\\.\124\\”语法错误:无效语法>>我建议对Padraic的答案进行一些编辑,以解决语法问题。@Murchak你可能需要r“C:\My Work\Tester Related\A_B_C.txt“在windows@Murchak,您还需要打印的参数Hanks Kevin!当然,括号必须在那里。但我缺少的是进口重新声明。这就成功了。谢谢大家。在发布这个问题之前,我确实搜索了这个,但是找不到答案。所以我发布了这个具体的例子,不仅是为了帮助我,也是为了帮助其他可能有类似问题的人。这里张贴的不同方法很有启发性。谢谢大家。
s = "C:\\My Work\\Tester Related\\A_B_C.txt"

import re
print (re.split(r"\\|\.|\_",s))
['C:', 'My Work', 'Tester Related', 'A', 'B', 'C', 'txt']