使用 re.findall 编写高效代码对文件夹中的文件进行排序

问题描述

这是文件夹中文件的命名方式:

Data20210608_FL_.xlsx
Data20210608_FLFR_.xlsx
Data20210510-fl_.xlsx
Data20210510-flfr_.xlsx
Data20210608_LRC_.xlsx
Data20210609_LRC_.xlsx

我想:

  1. 使用循环只打开包含 FL 或 FLFR 的那些
  2. 分隔以FL结尾的和以FLFR结尾的;

这是我的代码,但它不起作用,我不完全理解如何使用 re.findall

 import glob
 import os
 import re
 import pandas as pd

 # %%
 directory = r'C:/ .../Licor/'
 appendix = "_.xlsx"
 location = directory + appendix

 datafinal = pd.DataFrame()

 #%%
 for filepath in glob.iglob(location):
     print(filepath)

     head_tail = os.path.split(filepath)

     Treatment = re.findall("[_FL][^_]*",head_tail[1])[0] 
     data = pd.read_excel(filepath)

     data['Spectrum']= Treatment
     datafinal= pd.concat([datafinal,data])

谢谢!

解决方法

你的方法太复杂了,试试:

import os

for fn in os.listdir("./"):
    fn_without_ext = os.path.splitext(fn)[0]
    if fn_without_ext.endswith("FLFR_"):
        print(fn)  # do your FLFR stuff
    if fn_without_ext.endswith("FL_"):
        print(fn)  # do your FL stuff

更多信息:

https://docs.python.org/3/library/os.html#os.listdir

https://docs.python.org/3/library/stdtypes.html?highlight=endswith#str.endswith

https://docs.python.org/3/library/os.path.html#os.path.splitext