0
import re
import sys, getopt
import mmap

shakes = open(sys.argv[1:][0],'r')
love = open(sys.argv[1:][1], "w")
#moreLove = open (sys.argv[1:][2], "w")
#HardLove = open (sys.argv[1:][3], "w")

node =  re.compile('\*NODE[a-zA-Z, \r\n\t0-9\.-]+')
element3 = '\*ELEMENT, TYPE=S3RS[a-zA-Z, \r\n\t0-9\.=;_-]+'
element4 =  '\*ELEMENT, TYPE=S4RS[a-zA-Z, \r\n\t0-9\.=;_-]+'

m = mmap.mmap(shakes.fileno(), 0, access=mmap.ACCESS_READ)

line = node.findall(m.read().decode('utf-8'))
#for item in line:
#  love.write(item)
#print(m.read())
print(line)

以下は、完全なファイルに正規表現を適用しようとしているコードです。1MB 未満の小さなファイルでこのコードをテストすると、コードは正常に動作しますが、大きなファイルでは動作せず、空の配列が返されます。以下は、解析しようとしているデータのサンプルです。通常、このようなデータの 3M 行が含まれます。

*Assembly, name=Assembly
**  
*Instance, name=vessel-1, part=vessel_bot
*Node
      1,   24.8572464,     213.8125,   53.1415176
      2,   41.4983292,     213.8125,   41.4983292
      3,   44.4593391,     213.8125,   44.4593391
      4,   28.0079861,     213.8125,   56.2922592
      5,   24.8572464,     233.8125,   53.1415176
      6,   28.0079861,     233.8125,   56.2922592
      7,   48.2778168,     233.8125,   61.0057411
      8,    46.156498,     233.8125,   61.0057411
      9,   53.5811195,     223.3125,   53.5811195
     10,    54.641777,     224.8125,    54.641777
     11,   49.6920319,     233.8125,   62.4199524
     12,   56.0559921,     224.8125,   56.0559921
     13,   50.7526894,     233.8125,   61.3592911
     14,   56.0559921,     226.3125,   56.0559921
     15,   41.4983292,     226.3125,   41.4983292
     16,   35.8528366,     233.8125,   46.4594383
     17,   37.5893517,     233.8125,   52.4385948
     18,   45.8735542,     223.3125,   45.8735542
     19,   44.4593391,     221.3125,   44.4593391
     20,   35.0599136,     233.8125,   52.1926079
     21,   34.0794373,     233.8125,    44.686039
     22,   31.5089321,     233.8125,   44.4683838
     23,   38.5373192,     243.3125,   38.5373192
4

0 に答える 0