如果A文件夹下的pdf文件名90%相同和文件大小一样则删除一个留一个,python代码
时间: 2023-09-05 07:04:16 浏览: 162
### 回答1:
你可以使用 Python 的 os 库来遍历 A 文件夹中的 pdf 文件,然后使用 hashlib 库来计算文件大小和文件名的 hash 值。如果两个文件的 hash 值相同,并且文件大小也相同,则可以删除其中一个文件。
示例代码:
```
import os
import hashlib
folder_path = 'A'
file_list = os.listdir(folder_path)
file_dict = {}
for file_name in file_list:
if file_name.endswith('.pdf'):
file_path = os.path.join(folder_path, file_name)
file_size = os.path.getsize(file_path)
file_hash = hashlib.sha256(open(file_path, 'rb').read()).hexdigest()
file_dict[file_hash] = file_dict.get(file_hash, []) + [(file_name, file_size)]
for file_hash, file_info_list in file_dict.items():
if len(file_info_list) > 1:
for i in range(1, len(file_info_list)):
file_path = os.path.join(folder_path, file_info_list[i][0])
os.remove(file_path)
```
该代码首先遍历A文件夹下的所有文件,取出所有的PDF文件。然后对每个文件的文件名和大小做hash处理。最后判断如果有相同的文件名和大小的文件,则删除一个。
注意:这段代码只是示例,需要根据实际情况进行修改。
### 回答2:
可以使用Python的os模块和difflib模块来实现这个功能。以下是代码实现:
```python
import os
import difflib
def remove_duplicate_pdf_files(folder_path):
file_list = os.listdir(folder_path)
pdf_files = [f for f in file_list if f.endswith(".pdf")]
for i in range(len(pdf_files)):
for j in range(i+1, len(pdf_files)):
file1 = os.path.join(folder_path, pdf_files[i])
file2 = os.path.join(folder_path, pdf_files[j])
if os.path.isfile(file1) and os.path.isfile(file2):
file1_size = os.stat(file1).st_size
file2_size = os.stat(file2).st_size
if file1_size == file2_size:
file1_name = os.path.splitext(pdf_files[i])[0]
file2_name = os.path.splitext(pdf_files[j])[0]
similarity = difflib.SequenceMatcher(None, file1_name, file2_name).ratio()
if similarity >= 0.9:
os.remove(file2)
print(f"Deleted {file2}")
# 指定A文件夹的路径
folder_path = 'A文件夹路径'
remove_duplicate_pdf_files(folder_path)
```
请将代码中的`A文件夹路径`替换为实际的文件夹路径。这段代码会遍历文件夹下的所有pdf文件,并根据文件名和文件大小来判断是否为相同文件。其中,`0.9`为相似度阈值,您可以根据实际情况调整。如果相同文件名的文件大小也相同,则会删除一个文件。
### 回答3:
可以使用Python的os和shutil模块来实现这个功能。以下是一个示例代码:
```python
import os
import shutil
def remove_duplicates(folder_path):
# 获取目标文件夹下的所有文件名
file_names = os.listdir(folder_path)
# 创建一个字典用于存储每个文件名对应的数量
file_count = {}
for file_name in file_names:
# 获取文件的完整路径
file_path = os.path.join(folder_path, file_name)
# 只处理pdf文件
if file_name.endswith('.pdf'):
# 获取文件名(不包含后缀)
name = os.path.splitext(file_name)[0]
# 如果文件名在字典中不存在,则将其添加到字典中并初始化数量为1
# 如果文件名在字典中存在,则将其数量加1
if name not in file_count:
file_count[name] = 1
else:
file_count[name] += 1
# 删除重复的文件
for file_name, count in file_count.items():
if count > 1:
# 获取文件路径的前缀和后缀
prefix = os.path.join(folder_path, file_name)
suffix = '.pdf'
# 遍历文件,选择留下一个,删除其他重复的文件
for i in range(count-1):
duplicate_file_path = prefix + f'({i})' + suffix
os.remove(duplicate_file_path)
print(f'Removing file: {duplicate_file_path}')
# 在这里指定文件夹路径
folder_path = 'A文件夹路径'
remove_duplicates(folder_path)
```
在这个代码中,我们首先获取目标文件夹下的所有文件名,并创建一个字典用于存储每个文件名对应的数量。然后,我们遍历文件名,对于每个pdf文件,获取其文件名并更新字典中对应的数量。最后,我们再次遍历文件名,对于字典中数量大于1的文件名,我们将选择留下一个,删除其他重复的文件。
阅读全文