在Python中提取一部分文件path(一个目录)

我需要提取某个path的父目录的名称。 这就是它的样子: c:\ stuff \ directory_i_need \ subdir \ file 。 我正在修改“文件”的内容,使用其中的directory_i_need名称(而不是path)。 我创build了一个函数,它会给我一个所有文件的列表,然后…

 for path in file_list: #directory_name = os.path.dirname(path) # this is not what I need, that's why it is commented directories, files = path.split('\\') line_replace_add_directory = line_replace + directories # this is what I want to add in the text, with the directory name at the end # of the line. 

我怎样才能做到这一点?

 import os ## first file in current dir (with full path) file = os.path.join(os.getcwd(), os.listdir(os.getcwd())[0]) file os.path.dirname(file) ## directory of file os.path.dirname(os.path.dirname(file)) ## directory of directory of file ... 

而且你可以继续这么做多次

编辑:从os.path ,你可以使用os.path.split或os.path.basename:

 dir = os.path.dirname(os.path.dirname(file)) ## dir of dir of file ## once you're at the directory level you want, with the desired directory as the final path node: dirname1 = os.path.basename(dir) dirname2 = os.path.split(dir)[1] ## if you look at the documentation, this is exactly what os.path.basename does. 

在Python 3.4中,您可以使用pathlib模块 :

 >>> from pathlib import Path >>> p = Path('C:\Program Files\Internet Explorer\iexplore.exe') >>> p.name 'iexplore.exe' >>> p.suffix '.exe' >>> p.root '\\' >>> p.parts ('C:\\', 'Program Files', 'Internet Explorer', 'iexplore.exe') >>> p.relative_to('C:\Program Files') WindowsPath('Internet Explorer/iexplore.exe') >>> p.exists() True 

首先,看看你在os.path是否有splitunc()作为一个可用的函数。 返回的第一个项目应该是你想要的…但是我在Linux上,当我导入os并尝试使用它时,我没有这个function。

否则,完成工作的一个半丑的方法是使用:

 >>> pathname = "\\C:\\mystuff\\project\\file.py" >>> pathname '\\C:\\mystuff\\project\\file.py' >>> print pathname \C:\mystuff\project\file.py >>> "\\".join(pathname.split('\\')[:-2]) '\\C:\\mystuff' >>> "\\".join(pathname.split('\\')[:-1]) '\\C:\\mystuff\\project' 

其中显示检索文件上方的目录,以及上方的目录。

这是我做的提取目录的一部分:

 for path in file_list: directories = path.rsplit('\\') directories.reverse() line_replace_add_directory = line_replace+directories[2] 

感谢您的帮助。

你必须把整个path作为参数放到os.path.split中。 请参阅文档 。 它不像string分割。