如何在python中分割文档路径到文件夹名和文档名?

问题描述 投票:0回答:2

我需要在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)

非常感谢你的帮助!

python pandas url apply lapply
2个回答
0
投票

不知道你是如何得到路径的,但你可以创建一些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

0
投票

可能的话,你应该使用两次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.orgpandas-docsstablereferenceapipandas.DataFrame.apply.html。

© www.soinside.com 2019 - 2024. All rights reserved.