python - 尝试使用 os 库获取文件大小时,文件路径不起作用 [WinError 2]
问题描述
本质上,我是在比较 pdf 以查看是否有重复使用的名称以外的其他内容。这是因为我的数据集中的所有 pdf 都有唯一的名称,但在内容方面仍然可能是相同的。寻找并销毁副本。我仍在寻找这个项目的一部分。
我决定先尝试比较文件大小,看看我会发现什么,然后再尝试其他任何东西。我认为这将是一种简单的第一种方法,但由于某种原因,os 库不喜欢我向它提供文件路径字符串的方式。我已经尝试以任何方式操纵它以使其正常工作,但没有骰子。
我检查并确认该文件存在于我要进入的文件夹中。
所以这是我想象它如何工作的工作流程。我查询了可能包含重复项的可能图纸并将其保存为 excel 文件。我将该文件保存为 csv 文件,因此如果我弄乱了表格,我不会弄乱我的数据。另外,我新增了一种使用 pandas 将 csv 文件列转换为列表的快速方法。
在下面的代码中,您可以看到我创建了一个包含每一列的列表。列表中的所有数据都是字符串。描述不是很关键,但“发现于”和“名称”列(连接时)构成文件路径和文件名。我制作了一个新的组合字符串列表,即文件路径+文件,以便我可以比较它的大小。
我真的希望有一种方法可以在 csv 文件或带有列表的 python 中操作该路径。
这是我运行代码时出现的错误。
C:\Users\27659\Desktop\PycharmProjects\sort_unique_profiles\venv\Scripts\python.exe "C:/Users/27659/Desktop/PycharmProjects/sort_unique_profiles/比较并标记files.py"
same item in list
Traceback (most recent call last):
File "C:/Users/27659/Desktop/PycharmProjects/sort_unique_profiles/Compare and mark files.py", line 19, in <module>
if os.path.getsize(full_file_list[i]) == os.path.getsize(full_file_list[k]) and i == k:
File "C:\Users\27659\AppData\Local\Programs\Python\Python37-32\lib\genericpath.py", line 50, in getsize
return os.stat(filename).st_size
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\\WS\\WS\\Aspire\\CA & AW\\7205\\AW\\85-7535-01.pdf'
Process finished with exit code 1
'
这是代码
import pandas as pd
import os
main_df = pd.read_csv("C://Users//27659//Desktop//Unique Wood Profiles.csv")
drawing_number_list = main_df['Name'].tolist()
description_list = main_df['Description'].tolist()
found_in_list = main_df['Found In'].tolist()
full_file_list = ['placeholder']
for i in range(0, len(drawing_number_list)):
full_file_list.append(found_in_list[i] + drawing_number_list[i] + '.pdf')
del full_file_list[0]
for i in range(0, len(full_file_list)):
for k in range(0, len(full_file_list)):
if os.path.getsize(full_file_list[i]) == os.path.getsize(full_file_list[k]) and i == k:
print('same item in list')
elif os.path.getsize(full_file_list[i]) == os.path.getsize(full_file_list[i]):
print('oh bugger')
else:
print('thumbs up')
解决方案
您需要修改此行,因为它当前正在将其与自身进行比较:
elif os.path.getsize(full_file_list[i]) == os.path.getsize(full_file_list[i]):
至:
elif os.path.getsize(full_file_list[i]) == os.path.getsize(full_file_list[k]):
现在,我想提出一种不同的方法,并为您提供执行此操作的代码。而不是打扰文件大小/日期/随便看看文件哈希。
import hashlib
import pandas as pd
import os
main_df = pd.read_csv("C://Users//27659//Desktop//Unique Wood Profiles.csv")
drawing_number_list = main_df['Name'].tolist()
description_list = main_df['Description'].tolist()
found_in_list = main_df['Found In'].tolist()
full_file_list = []
file_hashes = dict()
for i in range(0, len(drawing_number_list)):
full_file_list.append(found_in_list[i] + drawing_number_list[i] + '.pdf')
for file_path in full_file_list:
file_hash = hashlib.sha256(open(file_path, 'rb').read()).digest()
if file_hash in file_hashes.keys():
file_hashes[file_hash].append(file_path)
else:
file_hashes[file_hash] = [file_path]
for key, value in file_hashes.items():
if len(value) > 1:
print('Duplicates Found')
print('Hash', key)
for entry in value:
print(entry)
print('-' * 40)
推荐阅读
- javascript - 有没有办法制作电子表格文件的多个副本并在 Google Apps 脚本中为每个文件选择名称
- html - 给我元素“head”的 HTML Validator 缺少子元素“title”的必需实例
- javascript - 根据指定的长度用 null 填充剩余的数组索引
- python - Discord bot 在我运行命令时显示错误,但有时仍会运行命令
- java - org.postgresql.util.PSQLException:int 类型的值错误:(简单的 JDBC 插入)
- r - 过滤数据列有某字
- java - 如何在 Android API 22 上创建 AES 密钥并通过私钥对其进行加密?
- python - CXFreeze:ModuleNotFoundError:没有名为“skimage.feature._orb_descriptor_positions”的模块
- reactjs - 错误:我的模态组件超出了最大更新深度
- amazon-web-services - 为 Neptune 构建 http REST API 请求的 AWS 授权标头