2017-05-24 6 views
0

Python 2.7が失敗します。 mmapモジュールを使用しようとしましたが、with open(filename, "r+b") as f:の代わりにオープンファイルハンドラを使用しました。私はそれを開き、WindowsError [Error 5]を取得します。mmapでファイルを開くと、Windows上で

管理者として実行するかどうかを再現します。 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

からPythonスクリプトを呼び出すか、絶対ファイル名を指定してください! – 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

関連する問題