私はPythonには新しく、基本的なものはいくつか分かりません。私は、オブジェクトの配列を含むバイナリファイルを持っています。格納されるオブジェクトは、従来のC構造です。私はその構造をPythonで作り直し、そのオブジェクトのリストにあるファイルの内容を読み込み、データをいくらか修正し、それを元に戻して保存したいと考えています。私が困っている部分は、ファイルの内容を読むことです。私はファイルを読むことに関するいくつかの同様の質問を読んだが、彼らは私が持っている質問に答えなかった。クラスを定義してクラスメンバーを定義しようとしましたが、__slot__
とpickle
でデータを読み込んでいますが、うまくいきませんでした。また、データメンバの1つが実際には異なる構造のオブジェクトを含む配列であることも関係し得る。このファイルを読むにはどうすればよいでしょうか?pythonクラスのデータメンバーをファイルから読み込みます
1
A
答えて
0
あなたはPythonのstruct.unpack()
を使用する必要があります。どのようなタイプであるか、ディスク上にどのようにパックされているかを正確に知る必要があります。 pickle
は、Pythonの記憶形式に固有のものであり、シリアル化をPython特有のものに変換している場合を除き、あなたにはまったく役に立ちません。
私は最近、私はおそらくあなたがそれを初期化するコンストラクタを持つクラスを作成することによって開始するあなたはos.read()
よりも便利かもしれませんファイルにmmap()
を使用する方法を示しました漠然と似た質問hereに、答えファイルポインタ、mmap
オブジェクト、およびオフセットのいくつかの組み合わせがあります。
この場合、__init___()
メソッドは構造体の内容を解凍してself
という属性を読み込み、初期化します。そして、これらの属性を変更するには、アクセサメソッドを追加し、ここでmmap()
またはos.write
バックstruct.pack
を使用してそれらをすべて書くためsave()
方法は、梱包のPythonのドキュメントからの例であり、続く三つの整数(2つの16ビットショートパンツを開梱長い32ビット):あなたのデータは、変数の長さとすることができるように
>>> from struct import *
>>> pack('=hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('=hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
それはあなたの場所でデータを変更することができないかもしれないことを意味する...聞こえます。
ここには、os.read()
とmmap
の両方を使用したPython2の例があります。私は/tmp/three_numbers.dat
とdd if=/dev/zero of=/tmp/three_numbers.dat count=1 bs=1k
を事前に作成しました:
関連する問題
- 1. ファイルからの読み込み(python)
- 2. pythonのgzipファイルから読み込み
- 3. ファイルからバイト[]を読み込み、読み込みます
- 4. Pythonのファイルからパラメータを読み込みます
- 5. PythonのRequestsモジュールからファイルを読み込みます
- 6. Pythonから.matファイルを読み込みます
- 7. Pythonでファイルから行を読み込みます
- 8. Pythonファイル読み込み
- 9. フォルダからすべてのファイルを読み込んで読み込むPython
- 10. リポジトリクラスをjsonファイルから読み込み、ファイルの読み込み方法は?
- 11. クラスとファイルの読み込み
- 12. PythonからSsh接続し、PHPからファイルを読み込みますか?
- 13. 私はPythonのコマンドラインからファイルを読み込みたい
- 14. ファイルからの蟻の読み込み?
- 15. k6のファイルからの読み込み
- 16. Cのファイルからの読み込み
- 17. UTF8からのファイルの読み込み
- 18. ファイルを読み込むpython
- 19. PythonでのMatLabファイルの読み込み
- 20. 例外の読み込みファイルのpython
- 21. ファイルをクラスと同じディレクトリに読み込みますか?
- 22. Python:(外部サーバーからの)ファイルの読み込み
- 23. ファイルからクラスオブジェクトを読み込みC++
- 24. XMLファイルからの読み込みC#
- 25. java InputMismatchExceptionファイルからの読み込み
- 26. c:ファイルからの読み込み
- 27. Matlabのtxtファイルから読み込み
- 28. ファイルからの読み込み
- 29. Excelファイルからの読み込みエラー
- 30. C++ .csvファイルからの読み込み