Python 은 어떻게 파일 자동 무 게 를 실현 합 니까?

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("―――― ――――")

이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기