Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式在python中创建包含文件名信息的列?_Python_Regex_Pandas - Fatal编程技术网

如何使用正则表达式在python中创建包含文件名信息的列?

如何使用正则表达式在python中创建包含文件名信息的列?,python,regex,pandas,Python,Regex,Pandas,我正在寻找更聪明的方法来创建两列,其中包含来自文件名的信息 我必须使用的文件名如下所示: 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):

我正在寻找更聪明的方法来创建两列,其中包含来自文件名的信息

我必须使用的文件名如下所示:

    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

“数据-05a-Tea 2017.xls” “数据-05 B-Tea 2017.xls”

但有时会出现文件名问题,它们看起来像这样(附加-):

“数据-07-C-Tea 2017.xls”

我想添加到dataframe的信息是粗体的。是数字和字母,因此我的数据框将如下所示:

    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

现在我只是像这样切割绳子:

    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)