在python中,如何将文档路径拆分为foldername和文档名?

2024-04-26 13:03:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将文档路径拆分为foldername和python中的文档名。这是一个包含许多行的大型数据框。对于后面没有文档名的文件名,只需在结果中将“文档名”列留空即可。例如,我有一个如下所示的数据帧:

     no  filename
     1  \\apple\config.csv
     2  \\apple\fox.pdf
     3  \\orange\cat.xls
     4  \\banana\eggplant.pdf
     5  \\lucy
...

我希望输出如下所示:

    foldername  documentname
    \\apple     config.csv
    \\apple     fox.pdf
    \\orange    cat.xls
    \\banana    eggplant.pdf
    \\lucy 
...     

我已经尝试了以下代码,但它不起作用


    y={'Foldername':[],'Docname':[]}
    def splitnames(x):
        if "." in x:
            docname=os.path.basename(x)
            rm="\\"+docname
            newur=x.replace(rm,'')
        else:
            newur=x
            docname=""
        result=[newur,docname]
        y["Foldername"].append(result[0])
        y["Docname"].append(result[1])
        return y;

    dff=df$filename.apply(splitnames)

非常感谢你的帮助


Tags: csv数据文档configapplepdfresultfilename
2条回答

不确定如何获取路径,但可以创建一些Pathlib对象,并使用一些类方法获取文件名和文件夹名

:

from pathlib import Path

data = """ no  filename
     1  \\apple\\config.csv
     2  \\apple\\fox.pdf
     3  \\orange\\cat.xls
     4  \\banana\\eggplant.pdf
     5  \\lucy"""

df = pd.read_csv(StringIO(data),sep='\s+')
df['filename'] = df['filename'].apply(Path)


df['folder'] = df['filename'].apply(lambda x : x.parent if '.' in x.suffix else x)
df['document_name'] = df['filename'].apply(lambda x : x.name if '.' in x.suffix  else np.nan)


print(df)

   no              filename   folder document_name
0   1     \apple\config.csv   \apple    config.csv
1   2        \apple\fox.pdf   \apple       fox.pdf
2   3       \orange\cat.xls  \orange       cat.xls
3   4  \banana\eggplant.pdf  \banana  eggplant.pdf
4   5                 \lucy    \lucy           NaN

您可能需要使用apply函数两次,以生成单独的列:

import pandas as pd
filenames = [r'\\apple\config.csv', r'\\apple\fox.pdf', r'\\orange\cat.xls', r'\\banana\eggplant.pdf']
df = pd.DataFrame( { 'filename':filenames })
df['Foldername'] = df['filename'].apply( lambda x : r'\\' + x.split('\\')[-2]  )
df['Docname'] = df['filename'].apply( lambda x :  x.split('\\')[-1]  )

默认的apply函数等待创建单个值,并且在这种情况下,值得指出要将其用于哪个列

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

相关问题 更多 >