ile = os.listdir(r'G:\lab_6') try: match = re.findall(r"(\d{10})_([\u4e00-\u9fa5]*)\)", file) student_id = match.group(1) name = match.group(2) print(student_id, name) except: print(file)
时间: 2024-02-16 12:00:13 浏览: 139
这段代码有一个问题,就是在调用`re.findall()`函数时使用的是`file`变量,但是该变量实际上应该是`files`变量,因为在前面使用`os.listdir()`函数获取文件名列表时使用的是`files`。另外,`re.findall()`函数返回的是一个包含所有匹配项的列表,因此需要使用循环来遍历列表中的每一项,然后再从每一项中提取学号和姓名信息。代码可以修改为以下形式:
```python
import os
import re
folder_path = r'G:\lab_6'
files = os.listdir(folder_path)
for file in files:
try:
match = re.findall(r"(\d{10})_([\u4e00-\u9fa5]*)\)", file)
if match:
student_id = match[0][0]
name = match[0][1]
print(student_id, name)
except:
print(file)
```
在正则表达式中,`(\d{10})`表示匹配10个数字,即学号,`([\u4e00-\u9fa5]*)`表示匹配一个或多个汉字,即姓名。`findall()`函数返回的是一个列表,每个元素都是一个元组,元组中包含的是每个捕获组的匹配结果。在这里,第一个捕获组是学号,第二个捕获组是姓名。因此,可以使用`match[0][0]`来获取学号,使用`match[0][1]`来获取姓名。
阅读全文