您可以使用正则表达式来查找字符串中的子字符串:
import re
string = r"C:\Users\ThisUser\Desktop\AC Mbr Analysis\Natl_hours_YTD_OC_2018-2019"
short = string.split('\\')[-1]
substring = re.search('\d+[-]*\d+',short).group()
print(substring)
可能想详细说明模式如何变化。它会永远是“年”吗?可以只是“年”吗?那么可能必须更改正则表达式。
编辑:
这一切都相当不方便,所以我制作了自己的虚拟文件,我可以用它来做你想做的事。对我来说很好,但请自己寻找:
import glob
import pandas as pd
import re
import os
all_files = glob.glob('Natl_hours_YTD_OC_*.csv')
full_paths = [os.path.abspath(file) for file in all_files]
print(full_paths)
>>> Out:
['C:\\Users\\Chris\\Desktop\\Natl_hours_YTD_OC_2018-2019.csv',
'C:\\Users\\Chris\\Desktop\\Natl_hours_YTD_OC_2019-2020.csv',
'C:\\Users\\Chris\\Desktop\\Natl_hours_YTD_OC_2020.csv']
Nat_dfs = []
for file in all_files:
df = pd.read_csv(file,delim_whitespace=True)
print(df,'\n')
df['File'] = file
df['Year'] = re.search('\d+[-]*\d*',file).group()
Nat_dfs.append(df)
>>> Out:
A B
0 7 7
1 8 8
2 9 9
A B
0 4 4
1 5 5
2 6 6
A B
0 1 1
1 2 2
2 3 3
NatHrs = pd.concat(Nat_dfs)
print(NatHrs)
>>> Out:
A B File Year
0 7 7 Natl_hours_YTD_OC_2018-2019.csv 2018-2019
1 8 8 Natl_hours_YTD_OC_2018-2019.csv 2018-2019
2 9 9 Natl_hours_YTD_OC_2018-2019.csv 2018-2019
0 4 4 Natl_hours_YTD_OC_2019-2020.csv 2019-2020
1 5 5 Natl_hours_YTD_OC_2019-2020.csv 2019-2020
2 6 6 Natl_hours_YTD_OC_2019-2020.csv 2019-2020
0 1 1 Natl_hours_YTD_OC_2020.csv 2020
1 2 2 Natl_hours_YTD_OC_2020.csv 2020
2 3 3 Natl_hours_YTD_OC_2020.csv 2020
我不知道你做错了什么,但这绝对有效。希望这就是你所需要的。