如何使用路径字符串的基本部分提取子字符串

rdh*_*dh9 4 python string path-manipulation pandas os.path

有几个关于字符串操作的问题,但我找不到允许我执行以下操作的答案——我认为它应该很简单......

我有一个 DataFrame,其中包含一个包含文件名和路径的列

下面生成一个具有代表性的示例 DataFrame:

index = ['1']
columns=['root']
df = pd.DataFrame(index=index,columns=columns)
path = 'C:\\folder1\\folder2\\folder3\\folder4\\filename.csv'
df['root']=path
df

Out[89]:
root
C:\folder1\folder2\folder3\folder4\filename.csv 
1 rows × 1 columns
Run Code Online (Sandbox Code Playgroud)

我只想得到字符串的“文件名”部分。行数多,路径不固定,不能用str.replace

我可以像这样去掉最右边的“.csv”部分:

df['root'] = df['root'].str.rstrip('.csv')    
df


Out[90]:
root
C:\folder1\folder2\folder3\folder4\filename 
1 rows × 1 columns
Run Code Online (Sandbox Code Playgroud)

- 但我无法使用我读过的任何方法来删除字符串左侧的路径部分。

鉴于路径的前面元素可以从记录更改为记录,我如何仅返回此路径(字符串)的“文件名”部分?

有人有建议吗?非常感谢任何帮助。

DSM*_*DSM 6

您可以使用实用程序os.path来简化此操作,即splitextbasename

>>> import os.path
>>> df["root"].apply(lambda x: os.path.splitext(os.path.basename(x))[0])
0    filename
Name: root, dtype: object
Run Code Online (Sandbox Code Playgroud)

PS:rstrip不像你认为的那样工作——它删除了那些字符,而不是那个子字符串。例如:

>>> "a11_vsc.csv".rstrip(".csv")
'a11_'
Run Code Online (Sandbox Code Playgroud)