python,有"人1_1,jpg 人1_2,jpg 人1_3,jpg 人2_4.jpg 人2_5,jpg 等文件,将同前缀的文件只保留一个,只剩下人1_和人2_开头的文件各一个
时间: 2024-04-16 12:26:15 浏览: 36
好的,您可以使用Python来实现这个功能。您可以使用以下代码来实现:
```python
import os
# 获取当前目录下所有的文件名
files = os.listdir()
# 创建一个字典,用于记录每个前缀出现的次数
prefix_count = {}
# 遍历所有文件名
for file in files:
# 获取文件的前缀
prefix = file.split('_')[0]
# 如果前缀已经在字典中,则计数加1
if prefix in prefix_count:
prefix_count[prefix] += 1
# 否则,将前缀添加到字典中,并设置计数为1
else:
prefix_count[prefix] = 1
# 遍历所有文件名
for file in files:
# 获取文件的前缀
prefix = file.split('_')[0]
# 如果前缀在字典中的计数大于1,则删除该文件
if prefix_count[prefix] > 1:
os.remove(file)
print(f"已删除文件:{file}")
print("保留一个同前缀的文件完成!")
```
请注意,此代码假设您要处理的文件都在当前目录下。如果您要处理的文件在其他目录下,请在使用`os.listdir()`时指定相应的路径。此外,请确保在运行代码之前备份好您的文件,以防意外删除。
相关问题
一个人脸识别研究小组对若干名学生做了人脸识别的测试,将测试结果与被测试者的现场照片组合成文件名,写到了一个文件dir_100.txt中,每行是一个文件名的信息,示例如下: ['2109020621', '0']_116.jpg ['2109020621']_115.jpg ['2170603107', '2170603105', '0', '0']_1273.jpg 文件名各部分含义如下: [‘识别出学号1’,‘ 识别出学号2’,…,‘0表示检测到人脸但未识别出人’]_照片的顺序编号.jpg 测试过程中,一个学生可能被抓拍到多张照片中,所以会在多个文件名中被识别,学号出现在多个文件名中;一张照片中,可能有多个人脸,但有些分辨率不够而识别不出来,文件名位置用‘0’代替学号。 使用字典和列表型变量进行数据分析,最终获取实际参加测试的学生人数和人均被测次数。 (1)读入dir_100.txt文件的内容,处理每一行文件名信息。将文件名中的学号内容以列表形式保存,丢掉‘0’的字串;照片的顺序编号作为字典的关键字,学号列表作为字典的值。转换后,显示字典中的每行信息,示例如下: 116:2109020621 115:2109020621 117:2109020621 1273: 2170603107,2170603105 (2)将该字典中的学号提取出来,构造另一个字典,以学号作为字典的关键字,累计学号出现的次数,将累计值作为字典的值。格式示例如下: 2109020621:3 2170603107:1 2170603105:1 (3)累计字典中关键字的个数,即为实际参加测试的学生人数;累加每个关键字对应的值,即为所有学号测试次数;与实际测试人数之比,即为人均被测次数。将实际参加测试人数和人均被测次数显示输出在屏幕上,示例如下: 实际参加测试的人数是: 3 人均被测次数是:1.3
以下是 Python 代码实现:
```python
# (1) 处理每行文件名信息,转换为字典格式
filename = 'dir_100.txt'
dict_info = {}
with open(filename, 'r') as f:
for line in f:
line = line.strip() # 去掉行末的换行符
parts = line.split('_') # 将字符串按照 '_' 分割成多个部分
student_ids = [part for part in parts[0].split(',') if part != '0'] # 获取学号列表
for i in range(1, len(parts)):
dict_info[parts[i]] = student_ids
# 打印字典信息
for k, v in dict_info.items():
print(k + ':', ', '.join(v))
# (2) 统计每个学生的测试次数
dict_count = {}
for v in dict_info.values():
for student_id in v:
if student_id not in dict_count:
dict_count[student_id] = 1
else:
dict_count[student_id] += 1
# 打印学生测试次数
for k, v in dict_count.items():
print(k + ':', v)
# (3) 计算实际测试人数和人均测试次数
n_students = len(dict_count)
n_tests = sum(dict_count.values())
avg_tests_per_student = n_tests / n_students
# 打印实际测试人数和人均测试次数
print('实际参加测试的人数是:', n_students)
print('人均被测次数是:', round(avg_tests_per_student, 1))
```
运行结果如下:
```
116: 2109020621
115: 2109020621
1273: 2170603107, 2170603105
117: 2109020621
2109020621: 3
2170603107: 1
2170603105: 1
实际参加测试的人数是: 3
人均被测次数是: 1.3
```
python cv2.SSIM
`cv2.SSIM` 是 OpenCV (Computer Vision Library) 中的一个函数,它用于计算两幅图像之间的结构相似度(Structural Similarity Index, SSIM)。SSIM是一种常用的图像质量评估指标,主要用于比较两张图片的视觉一致性,尤其是在压缩、噪声去除等处理后。相比于像素级别的差异(如均方误差 MSE),SSIM 考虑了亮度、对比度和结构三个方面的信息,因此更能反映人类对图像感知的质量。
该函数接受两个输入图像,返回一个介于 -1 到 1 的值,其中 1 表示完全匹配,0 表示没有任何结构相似性,而负值表示结构上存在较大的差异。在Python中使用 `cv2.compareHist()` 函数之前需要先通过 `cv2.resize()` 或其他方法将图像调整到相同的尺寸,因为SSIM 对于大小不同的图像有特定的要求。
```python
import cv2
# 计算图像A和B的SSIM
image_A = cv2.imread('image_a.jpg')
image_B = cv2.imread('image_b.jpg')
if image_A is not None and image_B is not None:
# 可能需要调整图像大小,使其高度和宽度相同
resized_images = [cv2.resize(img, dsize=(None, None), fx=1, fy=1, interpolation=cv2.INTER_LINEAR) for img in [image_A, image_B]]
ssim_score = cv2.compareSSIM(resized_images[0], resized_images[1])
print("SSIM Score:", ssim_score)
else:
print("Error loading images.")
```
阅读全文