2017-01-07 1 views
1

URL에서 파일의 압축을 풀려고하는데 아래 오류가 발생합니다. I 은 경로가 다양 할 수 있도록 URL의 동적 페이지를 가져옵니다.Errno 22 잘못된 모드 ('rb') 파이썬을 사용하여 URL에서 zip 압축을 풉니 다.

[ERRNO 22] 무효 모드 ('RB') 또는 파일 이름 'http://example.com/media/example.zip'

url = r"http://" + request.get_host() + uploaded_file_url 
    with zipfile.ZipFile(url, "r") as zip_ref: 
     zip_ref.extractall("c:/tmp") 
     zip_ref.namelist() 

상기 난 압축을 풀고 사용 코드의 단편이다. 예상대로 내 이해에 따라 이스케이프 문자를 전달하여 URL을 읽을 수 있습니다. "IOError: [Errno 22] invalid mode ('r') or filename: 'c:\\Python27\test.txt'"

URL에 대해이 작업을 수행 할 수있는 방법은 다음과 같습니다.

+0

'ZipFile'은 URL이 아닌 로컬 디스크 또는 메모리의 데이터를 필요로합니다. 먼저 인터넷에서이 파일을 다운로드해야합니다. – furas

+0

파일을 로컬에서 다운로드 한 다음 패스해야한다고 생각합니다. – arasub

+0

파일을 다운로드하고 (a) 로컬 파일에 저장 한 다음 ZipFile (b)을 사용하거나 메모리에 파일과 같은 객체를 만듭니다 ('io.StringIO' 또는'io.BytesIO') 인터넷에서 데이터를 채운 다음이 파일과 유사한 객체를'ZipFile'과 함께 사용하십시오 – furas

답변

0

URL에서 읽으려고, os.getcwd 함수를 호출하여 현재 작업중인 dir을 가져 와서 zip 함수에 전달하여 압축을 풉니 다. 그러나 파일 이름에 빈 공간이 있으면 코드를 두 번 트위크해야합니다.

fullpath = os.getcwd()+ uploaded_file_url 
    fullpath = url.replace('/' , '\\') 
    with zipfile.ZipFile(fullpath , "r") as zip_ref: 
     zip_ref.extractall("c:/tmp") 
     zip_ref.namelist() 
관련 문제