私の(おそらく64ビットWindows、64ビット2.7 Python)インストールでは、ファイル読み込み関数は4バイトのc_long(符号付きlong)を使用しています。 私は基本的なpythonファイルのread関数をテストしましたが、max signed long integer値(2,147,483,647)以上のオフセットを渡すことはできません。pythonファイルの読み込み "intが大きすぎてc longに変換できません"
import sys
import platform
inFileName = r'C:\Projects\Tampa\LASPY_EVLR\LAS_DATA\input\Large_LAS\20505.las'
bit32_offset_signedlong = 2147483647
print("python version: " + sys.version)
print("platform: " + str(platform.architecture()))
print("------------------------------")
fileref = open(inFileName, "r")
print("starting 32bit max read")
datpart_32bitmax = fileref.read(bit32_offset_signedlong)
print("------------------------------")
print("starting 32bit max plus one read")
datpart_32bitmaxplus1 = fileref.read(bit32_offset_signedlong + 1)
print("------------------------------")
この:これは私のpythonのインストールに問題が原因である、またはこれが本当にPythonでファイルから読み込むための最大の限界であれば...
私のテストコードは、下記の場合はわかりません
python version: 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)]
platform: ('64bit', 'WindowsPE')
------------------------------
starting 32bit max read
------------------------------
starting 32bit max plus one read
Traceback (most recent call last):
File "C:\Projects\Tampa\LASPY_EVLR\check_clong.py", line 18, in <module>
datpart_32bitmaxplus1 = fileref.read(bit32_offset_signedlong + 1)
OverflowError: Python int too large to convert to C long
Press any key to continue . . .
これは正常ですか?私は、ここで議論されているように、Pythonは "無制限"ファイルサイズ(利用可能なRAMとOSのビットサイズによってのみ制限される)を読むことができると考えました。読み取り方法。読み込みオフセットパラメータを使用してファイルの一部を読み込もうとしたときに、オーバーフローエラーが表示されたときに、32ビット符号付き整数よりも大きなファイルを読み書きできます。私の最終目標は、非常に大きなファイル(6GB)の末尾にいくつかのデータを追加することです。
Pythonのインストールに何か問題がありますか?もしそうなら、おそらく私はこの問題を解決するために何かできることがあります...
ファイルをバイナリで開いてみますか? 'rb' – Wajahat
ちょうど試しました。予想どおり変更はありません。 – ahm126