728x90
반응형
이름이나 확장자는 다르지만 사실 동일한 파일이 있다.
이 2개의 파일을 코드로 구분하려면 어떻게 해야 할까? 그리고 디렉토리 내에 그런 파일들이 여러개 있다면 어떻게 찾을 수 있을까?
아래 파일은 get_tickers.py를 복사하여 .txt로 확장자를 바꾼 동일한 파일이다. 2개의 파일이 사실은 같다는 걸 코드로 확인해보자.
파일이 동일하다는 걸 확인하려면 파일 전체를 해쉬로 만들어 값을 비교해보면 된다.
코드로 작성해보자.
import hashlib
def my_hash(file):
with open(file, 'rb') as f:
read_data = f.read()
hash = hashlib.sha512()
hash.update(read_data)
hexSHA512 = hash.hexdigest()
hashValue = hexSHA512.upper()
return hashValue
file_a = "C:\\Users\\Hwan\\Desktop\\TestDir\\get_tickers.py"
file_b = "C:\\Users\\Hwan\\Desktop\\TestDir\\get_tickers.py.txt"
hash_a = my_hash(file_a)
hash_b = my_hash(file_b)
print(file_a)
print(file_b)
print(hash_a)
print(hash_b)
print(hash_a == hash_b)
파일의 내용을 sha512로 해싱해주는 함수를 작성했다.
코드를 실행하면 이름과 확장자는 달라도 내용은 같다는 걸 알 수 있다.
폴더 내부를 전체 탐색하기 위해 아래 코드를 작성했다.
import os
workspace = "C:\\Users\\Hwan\\Desktop\\TestDir"
keywords = ["pass"]
list_result = []
for file in os.walk(workspace):
if any([True if keyword in file[0] else False for keyword in keywords]): continue
for x in file[2]:
list_result.append(file[0] + "\\" + x)
print(list_result)
코드를 실행하면 입력받은 경로 밑의 (경로나 파일 명에 pass가 포함되지 않은) 모든 파일을 리스트에 담아준다.
이제 입력한 경로 내의 모든 동일한 파일을 찾도록 아래의 코드를 추가했다.
dict_hash = {}
for file in list_result:
try:
dict_hash[my_hash(file)].append(file)
except:
dict_hash[my_hash(file)]= [file]
딕셔너리의 키로 파일 내용을 해싱한 값을 줬고, 값으로는 해당 해쉬값을 갖는 파일명 리스트를 담았다.
아래는 전체 코드이다.
import os
import hashlib
def my_hash(file):
with open(file, 'rb') as f:
read_data = f.read()
hash = hashlib.md5()
hash.update(read_data)
hexSHA512 = hash.hexdigest()
hashValue = hexSHA512.upper()
return hashValue
workspace = "C:\\Users\\hwan\\Desktop"
keywords = ["pass"]
list_result = []
for file in os.walk(workspace):
if any([True if keyword in file[0] else False for keyword in keywords]): continue
for x in file[2]:
list_result.append(file[0] + "\\" + x)
dict_hash = {}
for file in list_result:
try:
dict_hash[my_hash(file)].append(file)
except:
dict_hash[my_hash(file)]= [file]
for x in dict_hash:
if len(dict_hash[x]) > 1:
print(x, dict_hash[x])
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
QR-CODE 생성하기 (2) | 2023.03.29 |
---|---|
[Python] requirements.txt로 패키지 설치하기 (0) | 2023.01.12 |
FastAPI (0) | 2023.01.12 |
[Python] Docstring (0) | 2022.11.27 |
[Python] OS 모듈 : 디렉토리 전체 탐색하기 (하위 디렉토리까지) (0) | 2022.11.20 |
[python] JWT 모듈 (0) | 2022.09.13 |
댓글