2017-05-24 1 views
0

Windows의 경우 Python 2.7입니다. mmap 모듈을 사용하려고하지만 with open(filename, "r+b") as f: 대신 열린 파일 핸들러를 사용합니다. 방금 열어 WindowsError [Error 5]이됩니다.mmap을 사용한 파일 열기가 실패했습니다.

관리자로 실행하거나 재현하지 않습니다. codecs.open()을 사용해도 문제가 해결되지 않습니다.

# -*- coding: utf8 -*- 
from __future__ import print_function 
import mmap 

class QSHFile(object): 
    def __init__(self, filename): 
     self.filename = filename 
     self.file = open(filename, 'r') 
     self.fileno = self.file.fileno() 
     self.mm = mmap.mmap(self.fileno, 0) 
     print(self.mm[:5]) # prints first 5 


if __name__ == '__main__': 
    qsh = QSHFile('example.qsh') 

는 비트 또는 연구 후에, 나는 들어왔다 :

#! /usr/bin/python 
# -*- coding: utf8 -*- 
from __future__ import print_function 
from mmap import ACCESS_READ, mmap 

class QSHFile(object): 
    def __init__(self, filename): 
     self.filename = filename 
     self.file = open(filename, 'rb') 
     self.fileno = self.file.fileno() 
     self.mm = mmap(self.fileno, 0, access=ACCESS_READ) 
     print(self.mm[:5]) 

if __name__ == '__main__': 
    qsh = QSHFile('example.qsh') 

그리고 지금은 잘 작동합니다. 나는 지금 올바르게하고 있는가?

+0

왜 파일을 텍스트 모드로 열었습니까? – user2357112

+0

관리자로 cmd를 연 다음 – Aaron

+0

에서 파이썬 스크립트를 호출하거나 절대적인 파일 이름을 제공하십시오! mmap를 가져 오기 ACCESS_READ, mmap에 ... self.file = 개방 (파일 이름, 'RB') ... self.mm = mmap에 (self.fileno, 0, 액세스 = ACCESS_READ) 도움이에서 – Meitham

답변

0

모두들 덕분입니다.

# -*- coding: utf8 -*- 
from __future__ import print_function 
from mmap import ACCESS_READ, mmap 
from binascii import hexlify as hex 

class QSHFile(object): 
    def __init__(self, filename): 
     self.filename = filename 
     self.file = open(filename, 'rb') 
     print('File [%s] opened' % self.filename) 
     self.fileno = self.file.fileno() 
     self.mm = mmap(self.fileno, 0, access=ACCESS_READ) 
     print('File size: %s bytes' % self.mm.size()) 
     print(hex(self.mm[:5])) 


if __name__ == '__main__': 
    qsh = QSHFile('example.qsh') 
+0

[documention] (https://docs.python.org/2/library/mmap.html#module-mmap)은 Windows에서 'access'를 지정하지 않으면 기본값은'ACCESS_WRITE'입니다. 요점은 "올바른 방법"은 전적으로 당신이 원하는 것에 달려 있다는 것입니다. – martineau

+0

@martineau 예, 바이너리 파일을 읽으려고했습니다. – pmus

관련 문제