Python 은 어떻게 파일 자동 무 게 를 실현 합 니까?
14721 단어 Python문건무 거 운 것 을 제거 하 다
평소에 심심 하고 손재주 가 좋 았 습 니 다.과연 무(luan)진(ba)보다 비 싼(zao)자 료 를 많이 다운 받 아서 제 작은 하 드 디스크(6T 까지 확대 되 었 습 니 다)가 부족 합 니 다.
한 번 은 무심결에 두 개가 똑 같이 생 겼 다 는 것 을 알 게 되 었 습 니 다.집 이 이렇게 작은 상황 에서 제 가 어떻게 두 개의 똑 같은 것 을 참 을 수 있 겠 습 니까?제 하 드 디스크 에 뻔뻔 하 게 누 워 있 지 말고 과감하게 하 나 를 없 애고 정리 하 겠 습 니 다.파일 이름 이 같은 것 은 한 부 만 남 겨 두 려 고 했 는데 문제 가 생 겼 습 니 다.이름 이 같 지만 내용 이 전혀 다른 파일 이 있 습 니 다.내 가 황토 면 을 등지 고 하늘 을 향 해 에어컨 을 불고 수박 을 먹 으 며 내 려 받 은 것 을 삭제 하 는 것 은 불가능 하 다 고 생각한다.평생 삭제 할 수 없다.그러나 나 도 이 수 억 에 달 하 는 서 류 를 하나씩 열 어 볼 수 는 없 잖 아.안 이 똑 같 지?이 공 사 는 내 가 오래 했 을 거 야.소프트웨어 를 만들어 서 나 를 도와 줄 방법 이 없 을 까?답 은 확실 해.그렇지 않 으 면 나 도 여기 서 이 블 로 그 를 쓸 필요 가 없어.Python 은 파일 내용 을 비교 하 는 것 을 제공 합 니 다.그것 은 바로....................................................해시 알고리즘
MD5 메시지 요약 알고리즘(영어:MD5 Message-Digest Algorithm)은 광범 위 하 게 사용 되 는 암호 해시 함수 로 정보 전송 이 완전 하 게 일치 하도록 128 비트(16 바이트)의 해시 값(hash value)을 만 들 수 있 습 니 다.MD5 는 미국 암호 학자 로 널 드 리 베 스 트(Ronald Linn Rivest)가 설계 해 1992 년 MD4 알고리즘 대신 공개 됐다.
이렇게 길 게 말 하면 한 마디 로 요약 하면 이 물건 은 바로 문서 의 지문 이다.거의 모든 문서 가 유일한 것 이다.그러면 우 리 는 코드 를 만들어 서 나 를 도와 이 일 을 완성 해 야 한다.가장 좋 은 언어 로 서 Python 은 이렇게 나 에 게 브랜드 를 뒤 집 혔 다.
# -*- coding:utf-8 -*-
import os
import hashlib
import time
import sys
# MD5
def get_ms5(filename):
m = hashlib.md5()
mfile = open(filename , "rb")
m.update(mfile.read())
mfile.close()
md5_value = m.hexdigest()
return md5_value
#
def get_urllist():
base = ("D:\\lwj\\spider\\pic\\")#
list = os.listdir(base)
urllist = []
for i in list:
url = base + i
urllist.append(url)
return urllist
#
if __name__ == '__main__':
md5list = []
urllist = get_urllist()
print("test1")
for a in urllist:
md5 = get_ms5(a)
if(md5 in md5list):
os.remove(a)
print(" :%s" % a)
else:
md5list.append(md5)
print(" %s " % len(md5list))
효과.python 3 대 파일 다시 가 져 오기
1.제거 대기 데이터 생 성
줄 마다 고정된 자릿수 의 숫자 열 이다.
import os
from random import randint
#-- from u_ import *
print("―――― ――――")
#-- ()
#
= 13
= 500 * 10000
= "./a_ "
= f"{ }/ .txt"
#
_00 = "".join(["0" for i in range( - 1)])
_100 = "1" + _00
= int(_100)
_1000 = _100 + "0"
= int(_1000)
if not os.path.exists( ):
os.makedirs( )
#-- = _ ( )
#
with open( ,"a") as f:
for i in range( ):
f.write(f"{randint( , )}
")
= (i+1) / * 100
if == int( ):
print(f" {int( )}%")
#-- ()
#-- print(f"
:{ (0)}")
print("―――― ――――")
2.set 를 통 해 줄 별로 무 게 를 제거 합 니 다.
1.원가 비교
(1)모든 데이터 읽 기
(2)split 로 줄 나 누 기
(3)set 데이터 구 조 를 통 해 중복 데 이 터 를 제거 합 니 다.
(4)set 의 데 이 터 를 파일 에 기록 합 니 다.
import os
#-- from u_ import *
print("―――― ――――")
#-- ()
#
= "./a_ "
= "./b_ "
= f"{ }/ .txt"
#
#
if not os.path.exists( ):
os.makedirs( )
if not os.path.exists( ):
os.makedirs( )
#-- = _ ( )
#
= []
= [f"{ }/{i}" for i in os.listdir( )]
#-- getDeepFilePaths( , ,"txt")
print(f"
{len( )} ")
= b"
"
if platform.system().lower() == 'windows':
= b"\r
"
#
all_lines = []
= 0
for in :
+= 1
print(f"
{ } ")
#-- ()
# (1)
with open( , "rb") as f:
data = f.read()
# (2)split
lines = data.split( )
all_lines.extend(lines)
#-- ()
#-- print(f" , :{ ()}")
# (3)
all_lines_set = set(all_lines)
all_lines_set.remove(b"")
#-- ()
#-- print(f"
, :{ ()}")
# (4)
with open( ,"ab") as f_rst:
for line in all_lines_set:
f_rst.write(line + )
#-- ()
#-- print(f"
, :{ ()}")
print(f"
:{ }")
#-- ()
#-- print(f"
:{ (0)}")
print("―――― ――――")
첨부:
(2)정규 표현 식 으로 줄 을 나눈다.
import re
# (2) b, b''' '''
regx = '''[\w\~`\!\@\#\$\%\^\&\*\(\)\_\-\+\=\[\]\{\}\:\;\,\.\/\<\>\?]+'''
lines = re.findall(regx, data)
2.md5 비교
import hashlib
import os
#-- from u_ import *
print("―――― ――――")
#-- ()
#
= "./a_ "
= "./b_ "
= f"{ }/ .txt"
#
#
if not os.path.exists( ):
os.makedirs( )
if not os.path.exists( ):
os.makedirs( )
#-- = _ ( )
#
= [f"{ }/{i}" for i in os.listdir( )]
#-- = []
#-- getDeepFilePaths( , ,"txt")
print(f"
{len( )} ")
def gen_md5(data):
md5 = hashlib.md5()
if repr(type(data)) == "<class 'str'>":
data = data.encode('utf-8')
md5.update(data)
return md5.hexdigest()
#
md5 = set()
with open( , "a") as f_rst:
= 0
for in :
+= 1
print(f"
{ } ")
#
with open( , 'rb') as f:
= 0
buf_size = 1024 * 1024
buf = f.read(buf_size)
while buf:
+= buf.count(b'
')
buf = f.read(buf_size)
# 、 、 、
#-- ()
i = 0
for line_ in open( ):
i += 1
line = line_ .strip()
md5 = gen_md5(line)
if md5 not in md5 :
md5 .add(md5 )
f_rst.write(line_ )
= i / * 10
if == int( ):
print(f" {int( )*10}%")
#-- ()
#-- print(f" :{ ()}")
print(f"
:{ }")
#-- ()
#-- print(f"
:{ (0)}")
print("―――― ――――")
3,2 로 병합
import hashlib
import os
import platform
import queue
import shutil
from uuid import uuid1
from u_ import *
print("―――― ――――")
()
# 1.
= "./a_ "
= "./b_ "
= f"{ }/ .txt"
= "./c_ "
= 50 * 1024 * 1024 # 50M
# 2.
#
if not os.path.exists( ):
os.makedirs( )
if not os.path.exists( ):
os.makedirs( )
if not os.path.exists( ):
os.makedirs( )
shutil.rmtree( )
os.makedirs( )
= _ ( )
#
# = [f"{ }/{i}" for i in os.listdir( )]
= []
getDeepFilePaths( , ,"txt")
print(f" {len( )} ")
= b"
"
if platform.system().lower() == 'windows':
= b"\r
"
# 3.
# (1)
()
= []
= b""
for in :
with open( , 'rb') as f:
buf = f.read( )
while buf:
data = buf.split( ,1)
= f"{ }/ _{ (1)}_{uuid1()}.txt"
with open( , 'ab') as ff:
ff.write( + data[0])
.append( )
try:
= data[1]
except:
= b""
buf = f.read( )
= f"{ }/ _{ (1)}_{uuid1()}.txt"
with open( , 'ab') as ff:
ff.write( + )
.append( )
= b""
del buf,data,
()
print(f"
, :{ ()}")
# (2)
()
_ (1)
= queue.Queue()
for in :
with open( , "rb") as f:
data = f.read()
data = set(data.split( ))
if b"" in data:
data.remove(b"")
if in data:
data.remove( )
data = sorted(data)
= f"{ }/ _{ (1)}_{uuid1()}.txt"
with open( , 'ab') as ff:
for line in data:
ff.write(line + )
.put( )
os.remove( )
del data
()
print(f"
, :{ ()}")
# (3)
(" ")
_ (1)
= .qsize()
= - 1
print(f"
{ } ")
= 0
while > 1:
+= 1
print(f"
{ } ")
a = .get()
b = .get()
= f"{ }/{ (1)}_{uuid1()}.txt"
if == :
=
with open( a,"rb") as a, open( b,"rb") as b, open( ,"wb") as ff:
# region
is_a_over = False
is_b_over = False
a = a.readline().strip()
b = b.readline().strip()
last = None
while not (is_a_over and is_b_over):
if is_a_over:
b = b.readline()
if not b:
is_b_over = True
else:
ff.write(b)
elif is_b_over:
a = a.readline()
if not a:
is_a_over = True
else:
ff.write(a)
else:
# region
if not a:
is_a_over = True
if not b:
is_b_over = True
continue
else:
ff.write(b + )
continue
if not b:
is_b_over = True
ff.write(a + )
continue
# endregion
if a <= b:
if a == b or a == last:
a = a.readline().strip()
if not a:
is_a_over = True
ff.write(b + )
continue
else:
last = a
ff.write(last + )
a = a.readline().strip()
if not a:
is_a_over = True
ff.write(b + )
continue
else:
if b == last:
b = b.readline().strip()
if not b:
is_b_over = True
ff.write(a + )
continue
else:
last = b
ff.write(last + )
b = b.readline().strip()
if not b:
is_b_over = True
ff.write(a + )
continue
# endregion
.put( )
os.remove( a)
os.remove( b)
= .qsize()
()
print(f" :{ ()}")
(" ")
print(f"
, :{ (' ',' ')}")
print(f"
:{ }")
()
print(f"
:{ (0)}")
print("―――― ――――")
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.