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) f = open("g:\\Test.csv", "w+") if match: student_id = match[0][0] name = match[0][1] lst = [student_id, name] print(lst) for l in lst: f.write(",".join(l) + "\n") f.close() except: print(file)
时间: 2024-02-07 09:03:41 浏览: 112
这段代码的作用是遍历指定文件夹下的所有文件,找出文件名中符合特定正则表达式的部分,然后将这些部分提取出来并存储到一个列表中。接着,将这个列表中的信息写入到一个名为 "Test.csv" 的 CSV 文件中。具体来说,这个正则表达式是用来匹配文件名中包含 10 位数字和中文名字的部分。如果找到了符合条件的文件名,则将其中的学生 ID 和姓名提取出来,并将这些信息写入到 CSV 文件中。如果程序执行过程中出现了异常,则会将异常信息打印出来。
相关问题
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)
这段代码有一个问题,就是在调用`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]`来获取姓名。
用python实现文件夹lab_6中存放着某班学生提交的一次实验报告,实验报告文件名中包含有学生的姓名、学号信息,格式如下"实验报告_实验6 Python文件与数据格式化(2040706165_姓名)(1).doc"。请用正则表达式获取学生姓名、学号存入CBC.csv中。 (提示: ① 共有35条记录,有一些文件命名未按规则; ② 以下代码可输出指定目录中的所有文件的名称
可以使用Python的os和re模块来实现该功能。以下是一个可能的实现:
```python
import os
import re
# 定义匹配规则
pattern = re.compile(r'实验报告_实验6 Python文件与数据格式化\((\d{10})_(.*?)\)\(\d+\)\.doc')
# 遍历文件夹
folder_path = './lab_6'
files = os.listdir(folder_path)
# 存储学生姓名和学号的列表
students = []
for file in files:
# 判断是否为doc文件
if os.path.splitext(file)[1] == '.doc':
# 进行正则匹配
match = pattern.match(file)
if match:
# 获取学号和姓名
student_id = match.group(1)
student_name = match.group(2)
# 存入列表
students.append((student_id, student_name))
# 将学生信息写入CSV文件
with open('CBC.csv', 'w') as f:
f.write('学号,姓名\n')
for student in students:
f.write('{},{}\n'.format(student[0], student[1]))
```
以上代码首先定义了一个正则表达式模式,用于匹配符合命名规则的文件名。然后遍历文件夹中的所有文件,对每个doc文件进行正则匹配,获取学号和姓名,并将其存入一个列表中。最后将学生信息写入CSV文件中。
阅读全文