python - 如何使用正则表达式在 python 中使用来自文件名的信息创建列?
问题描述
我正在寻找更聪明的方法来创建两列,其中包含来自文件名的信息。
我必须使用的文件名如下所示:
“数据 - 05 A - 茶 2017.xls” “数据 - 05 B - 茶 2017.xls”
但有时文件名会出现问题,它们看起来像这样(附加 - ):
“数据 - 07 - C - 茶 2017.xls”
我要添加到数据框中的信息以粗体显示。是数字和字母,所以我的数据框将如下所示:
X Y Z Number Letter
0.32 0.23 0.234 05 A
0.4 0.24 44 05 B
23 21.2 0.4 07 C
现在我只是像这样切片字符串:
for file_name in glob.glob(path):
df = pd.read_html(file_name)[0]
rows = df.shape[0]
if "/A/" in path:
number = file_name[86:88]
letter = file_name[89:90]
elif "/B/" in path:
number = file_name[86:88]
letter = file_name[91:92]
df["number"] = [number] * rows
df["letter"] = [letter] * rows
将其相乘是因为我需要此值出现在此文件的整个数据集中,我想从中获取有关数字和字母的信息 - 包含 n 行的表
但我相信使用正则表达式会更聪明,但我不知道如何。我将非常感谢它的每一个帮助
解决方案
对于您给出的示例,以下正则表达式有效:
import re
file_names = [
'data - 05 A - Tea 2017.xls',
'data - 07 - C - Tea 2017.xls',
'data - 05 B - Tea 2017.xls',
]
for file_name in file_names:
number, letter = re.findall('data - ([0-9]+).*([A-Z]) - Tea.*', file_name)[0]
print(number, letter)