파이썬을 사용하여 전자 메일에 첨부 된 아카이브 (rar 또는 zip)에서 파일 목록을 얻는 방법은 무엇입니까? 즉, EML 파일이 있습니다. 목록을 가져 오기 위해 파일의 압축을 풀 필요가 없습니다. 이론적으로 가능한 옵션은 매우 큰 파일을 첨부하고 추출 된 첨부 파일을 처리하는 데 많은 시간과 리소스가 필요할 수 있습니다.파이썬을 사용하여 전자 메일에 첨부 된 아카이브 (rar 또는 zip)에서 파일 목록을 가져 오는 방법은 무엇입니까?
1
A
답변
1
여기
message.eml
로 저장하는 간단한 여러 부분 메시지의 첫 번째 첨부지고는 다음 stdlib으로 그렇게하는 방법은 다음과 같습니다
import email.parser
import StringIO
import zipfile
with open('message.eml') as f:
msg = email.parser.Parser().parse(f)
attachment = msg.get_payload(1)
zipf = StringIO.StringIO(attachment.get_payload())
zip = zipfile.ZipFile(zipf)
filenames = zip.namelist()
이 뜻을 전체 MIME 봉투를 구문 분석하고, 전체 첨부 파일을 디코딩하고, 첨부 파일의 ZIP 디렉토리를 읽습니다.하지만 최소한 ZIP 아카이브에있는 파일 중 어떤 것도 압축 해제하지 않으므로 실제로 성능상의 문제가 없을 것입니다. 걱정해라.
0
This answer은 파일 객체를 가져 오는 방법을 알려줍니다 (zip 아카이브의 경우 일반 open() 함수가 아닌 ZipFile constructor을 사용하여 파일 열기). 그런 다음 아카이브 멤버의 이름을 얻을 수 zipfile.namelist()을 사용할 수 있습니다
stdlib 도구를 사용하면 [전체 MIME 봉투를 구문 분석] (http://docs.python.org/2/library/email.parser.html#parser-class-api), [추출 첨부 파일] (http://docs.python.org/2/library/email.message.html#email.message.Message.get_payload), [zip으로 열기] (http://docs.python.org /2/library/zipfile.html#zipfile.ZipFile) 및 [디렉토리 읽기] (http://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.infolist)를 참조하십시오. 물론 실제 우편 번호를 읽을 필요는 없습니다. 이것을 시도해 보았습니까? 너무 느리거나 "이론적으로 가능한"것에 대해 걱정하셨습니까? – abarnert