Python实现检测相同文件的方法

版权申诉
0 下载量 91 浏览量 更新于2024-12-14 收藏 3KB ZIP 举报
资源摘要信息:"在Python中获取相同文件的方法" 在Python中,获取相同文件是指找到两个或多个文件在内容上是完全相同的。这可以用来进行文件的去重、清理重复内容等工作。为了实现这一目的,我们通常会使用哈希算法对文件内容进行校验,最常用的是MD5或SHA系列算法。 Python的内置库hashlib提供了常用的哈希算法,可以通过它来计算文件的哈希值。除此之外,我们还可以通过os模块来获取文件的信息,比如文件大小和修改时间,这些信息也可以辅助我们判断文件是否相同。 在这个场景下,我们需要理解几个关键的知识点: 1. 文件哈希:这是指通过哈希函数,将文件内容转换为一个固定长度的唯一值。如果两个文件的哈希值相同,那么我们可以认为这两个文件的内容也是相同的。 2. 文件读取:在Python中,文件读取通常使用内置的open()函数。通过这个函数,我们可以打开文件并读取其内容。 3. 循环和条件判断:在寻找相同文件的过程中,我们可能需要遍历文件夹中的每一个文件,并且使用条件判断来确定是否找到了相同的文件。 4. 字典和集合:在Python中,字典和集合是两种常用的存储数据的结构。在处理文件时,我们可能用到它们来快速检查文件是否已经被处理过,以及存储已经找到的哈希值和文件名。 具体来说,一个基础的算法流程可能如下: - 遍历指定目录或多个目录,获取所有文件。 - 对每个文件计算哈希值。 - 将文件名和对应的哈希值存储在一个字典中。 - 在遍历的过程中,对比新文件的哈希值是否已经在字典中存在。 - 如果存在,则说明找到了相同文件。 - 最后,输出或处理这些相同文件。 下面我们具体分析一下提供的文件名列表: 1. network.py:这个文件可能和网络操作有关,但在获取相同文件的上下文中,这个文件可能是用于网络传输文件,或者从网络上获取文件信息。 2. get_same_file.py:这个文件名直接表明了它可能包含了获取相同文件的核心逻辑。在这个文件中,我们可能会找到一个或多个函数来完成文件的读取、哈希计算和比较操作。 3. test_walkfile.py:这个文件名表明它可能是一个测试文件,用来测试上述提到的功能。它可能包含了一些预设的测试用例,以及对get_same_file.py功能的调用和结果验证。 结合以上信息,如果你要开发一个获取相同文件的Python脚本,你需要做的大致步骤如下: - 首先,你需要导入必要的模块,比如os, hashlib等。 - 定义一个函数来计算文件的哈希值。 - 定义一个函数来遍历文件夹,获取所有文件。 - 在遍历的过程中,对于每一个文件,计算其哈希值,并和已经存在的哈希值进行对比。 - 如果发现相同哈希值的文件,则记录下来,这些就是我们需要处理的相同文件。 - 最后,输出相同文件的结果,或者根据需要进行下一步操作。 在实际操作中,还应注意文件大小的判断,避免对大文件进行不必要的哈希计算。此外,错误处理也是不可忽视的一部分,应当对文件不存在、权限不足等异常情况进行处理。 通过上述的知识点,我们就可以构建一个在Python中获取相同文件的程序。这是一个基本的文件处理任务,广泛应用于数据备份、存储优化、内容管理和信息去重等场景中。

Traceback (most recent call last): File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc return self._engine.get_loc(casted_key) File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\index.pyx", line 165, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\hashtable_class_helper.pxi", line 5745, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\_libs\hashtable_class_helper.pxi", line 5753, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'A' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "e:\Mydata\py\提取指定范围excel数据.py", line 7, in <module> data = df.loc[0:9, 'A':'B'] # 例如提取第1行到第10行,第1列到第3列的数据 File "D:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1067, in __getitem__ return self._getitem_tuple(key) File "D:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1256, in _getitem_tuple return self._getitem_tuple_same_dim(tup) File "D:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 924, in _getitem_tuple_same_dim retval = getattr(retval, self.name)._getitem_axis(key, axis=i) File "D:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1290, in _getitem_axis return self._get_slice_axis(key, axis=axis) File "D:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1324, in _get_slice_axis indexer = labels.slice_indexer(slice_obj.start, slice_obj.stop, slice_obj.step) File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 6559, in slice_indexer start_slice, end_slice = self.slice_locs(start, end, step=step) File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 6767, in slice_locs start_slice = self.get_slice_bound(start, "left") File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 6686, in get_slice_bound raise err File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 6680, in get_slice_bound slc = self.get_loc(label) File "D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 3804, in get_loc raise KeyError(key) from err KeyError: 'A'

2023-07-16 上传

C:\Users\adminstor\anaconda3\envs\python39\python.exe D:\daima\KalmanNet_TSP-main\main_lor_DT_NLobs.py Pipeline Start Current Time = 07.24.23_12:19:44 Using GPU 1/r2 [dB]: tensor(30.) 1/q2 [dB]: tensor(30.) Start Data Gen Data Load data_lor_v0_rq3030_T20.pt no chopping trainset size: torch.Size([1000, 3, 20]) cvset size: torch.Size([100, 3, 20]) testset size: torch.Size([200, 3, 20]) Evaluate EKF full Extended Kalman Filter - MSE LOSS: tensor(-26.4659) [dB] Extended Kalman Filter - STD: tensor(1.6740) [dB] Inference Time: 37.115127086639404 KalmanNet start Number of trainable parameters for KNet: 19938 Composition Loss: True Traceback (most recent call last): File "D:\daima\KalmanNet_TSP-main\main_lor_DT_NLobs.py", line 146, in <module> [MSE_cv_linear_epoch, MSE_cv_dB_epoch, MSE_train_linear_epoch, MSE_train_dB_epoch] = KalmanNet_Pipeline.NNTrain(sys_model, cv_input, cv_target, train_input, train_target, path_results) File "D:\daima\KalmanNet_TSP-main\Pipelines\Pipeline_EKF.py", line 150, in NNTrain MSE_trainbatch_linear_LOSS = self.alpha * self.loss_fn(x_out_training_batch, train_target_batch)+(1-self.alpha)*self.loss_fn(y_hat, y_training_batch) File "C:\Users\adminstor\anaconda3\envs\python39\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl return forward_call(*input, **kwargs) File "C:\Users\adminstor\anaconda3\envs\python39\lib\site-packages\torch\nn\modules\loss.py", line 520, in forward return F.mse_loss(input, target, reduction=self.reduction) File "C:\Users\adminstor\anaconda3\envs\python39\lib\site-packages\torch\nn\functional.py", line 3112, in mse_loss return torch._C._nn.mse_loss(expanded_input, expanded_target, _Reduction.get_enum(reduction)) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

2023-07-25 上传