# Another version of reading point data from a file using re
import re
import datetime, time
data_file = r'H:\TEMP\temsys\sample_points3.txt'
def convert_data(s):
for func in (int, float):
try:
n = func(s)
return n
except:
pass
return s
def read_file_data(f):
ptDict
= {}
wireDict
= {}
fList
= open(f).readlines()
in_pnt = False
patt
= re.compile(r'''\d+\.\d+E\+\d+| # engineering notation ++
-\d+\.\d+E\+\d+| # engineering notation -+
-\d+\.\d+E-\d+| #
engineering notation --
\d+\.\d+E-\d+| #
engineering notation +-
\d+\.\d+| # positive float format
-\d+\.\d+| # negative float format
\d+\.| # positive float format
-\d+\.| # negative float format
\d+ # positive integer
''', re.X
)
for line in fList:
lineList
= [x.lower().strip() for x in line.strip().split('
', 1) if x != '']
if in_pnt:
pt_data
+= re.findall(patt, line)
in_pnt =
False
ptDict[convert_data(pt_data[0])] = [convert_data(x)
for x in pt_data[1:] if x != '0']
elif
'pnt' in line.lower() and
'*' in line:
in_pnt =
True
pt_data =
re.findall(patt, line)
elif
'rect' in lineList or 'tria' in lineList:
sLst = re.findall(r'\d{8}',
line)
wireDict[convert_data(sLst[0])] = [convert_data(x) for
x in sLst[1:]]
elif
'pnt' in lineList:
sLst = re.findall(r'\d.{7}|(?<=\d.{7}).+',
line)
ptDict[convert_data(sLst[0])] = [convert_data(x.strip()) for x in sLst[1:]]
return ptDict,wireDict
if __name__ == '__main__':
ptDict,wireDict
= read_file_data(data_file)
print 'Point
dictionary:'
for key in ptDict:
print '%s =
%s' % (key, ptDict[key])
print '\nWire dictionary:'
for key in wireDict:
print '%s =
%s' % (key, wireDict[key])
print
print time.time()
print time.clock()
print time.ctime(time.time())
print time.strftime('%H:%M:%S',
time.localtime())
'''
>>>
Point dictionary:
30400000 = [10.0,
0.0, 0.0]
40000000 = [15.0,
0.0, 0.0]
2 = [5.0, 0.0,
0.0]
3 = [10.0, 0.0,
0.0]
4 = [15.0, 0.0,
0.0]
5 = [20.0, 0.0,
0.0]
6 = [0.0, 5.0,
0.0]
1 = [0.0, 0.0,
0.0]
8 = [10.0, 5.0,
0.0]
9 = [15.0, 5.0,
0.0]
10270106 =
[1097.15002,
10270107 =
[1115.47864,
10010012 = [3.0,
0.0, 0.0]
60000800 = [0.0,
5.0, 0.0]
20020003 = [5.0,
0.0, 0.0]
10260209 =
[1156.2659900000001,
80009000 = [10.0,
5.0, 0.0]
7 = [5.0, 5.0,
0.0]
3280311 =
[1365.6743200000001, -371.22653200000002,
50050000 = [20.0,
0.0, 0.0]
90009000 = [15.0,
5.0, 0.0]
70000000 = [5.0,
5.0, 0.0]
3280502 =
[1254.3385000000001, -142.613068,
3280503 =
[1270.5728799999999, -175.843582,
3280504 =
[1282.8614500000001, -201.004501,
Wire dictionary:
10000000 =
[10000000, 20000000, 70000000]
20000000 =
[20000000, 30000000, 80000000]
30000000 =
[30000000, 40000000, 90000000]
10000071 =
[10000101, 20000022, 70000000, 60000055]
40000000 =
[40000000, 50000000]
30000088 =
[30000208, 40000002, 90005000, 80003000]
20000092 =
[20000105, 30000004, 80004000, 71111167]
40000094 =
[40000304, 50000071, 90000600]
'''
''' Data File:
Rect
1000007110000101200000227000000060000055
Rect
2000009220000105300000048000400071111167
Rect
3000008830000208400000029000500080003000
Tria
40000094400003045000007190000600
Pnt
100100123. 0.
0.
Pnt
200200035. 0.
0.
Pnt
3040000010. 0.
0.
Pnt
4000000015. 0.
0.
Pnt
5005000020. 0.
0.
Pnt
600008000. 5.
0.
Pnt
700000005. 5.
0.
Pnt
8000900010. 5.
0.
Pnt
9000900015. 5.
0.
Pnt
100100123. 0.
0.
Pnt
200200035. 0.
0.
Pnt
3040000010. 0.
0.
Pnt
4000000015. 0.
0.
Pnt
5005000020. 0.
0.
Pnt
600008000. 5.
0.
Pnt
700000005. 5.
0.
Pnt
8000900010. 5.
0.
Pnt
9000900015. 5.
0.
Rect
100000001000000020000000700000006
Rect
200000002000000030000000800000007
Rect
300000003000000040000000900000008
Tria
4000000040000000500000009
Pnt
1 0.
0. 0.
Pnt
2 5.
0. 0.
Pnt
3 10.
0. 0.
Pnt
4 15.
0. 0.
Pnt
5 20.
0. 0.
Pnt
6 0.
5. 0.
Pnt
7 5.
5. 0.
Pnt
8 10.
5. 0.
Pnt
9 15.
5. 0.
Pnt
* 3280311 0 1.36567432E+03 -3.71226532E+02
* 2.01031464E+02 0
Pnt * 3280502 0 1.25433850E+03 -1.42613068E+02
* 1.80202667E+02 0
Pnt
* 3280503 0 1.27057288E+03 -1.75843582E+02
* 1.84236084E+02 0
Pnt
* 3280504 0 1.28286145E+03 -2.01004501E+02
* 1.87218460E+02 0
Pnt*
10260209
1156.26599
*
Pnt*
10270106
1097.15002
*
Pnt*
10270107 1115.47864
*
'''
'''
>>> d =
{100: [1,0,0],102: [0,1,0],202: [0,1,1]}
>>> dict(zip([str(x) for x in d.values()], d.keys()))
{'[0, 1, 1]':
202, '[1, 0, 0]': 100, '[0, 1, 0]': 102}
>>>
'''
'''
>>> d =
{100: [1,0,0],102: [0,1,0],202: [0,1,1]}
>>> dict(zip([tuple(x) for x in d.values()], d.keys()))
{(0, 1, 0): 102,
(0, 1, 1): 202, (1, 0, 0): 100}
>>>
'''
'''
>>> f = open(r'H:\TEMP\temsys\sample_points4.txt').readlines()
>>> in_pt = False
>>> ptDict = {}
>>> for line in f:
... lineList
= [x.lower().strip() for x in line.strip().split('
', 1) if x != '']
... if in_pnt:
... pt_data += [s.strip('*
') for s in lineList[1].split() if (s != '*' and s !=
'0')]
... in_pnt = False
... ptDict[convert_data(pt_data[1])]
= [convert_data(x) for x in pt_data[2:]]
... elif
'pnt' in lineList and '*'
in lineList[1]:
... in_pnt = True
... pt_data = [lineList[0],
] + [s.strip('* ') for s in lineList[1].split()
if (s != '*' and s != '0')]
...
>>> ptDict
{3280504: [1282.8614500000001,
-201.004501,
>>>
'''
'''
>>> s =
'Pnt * 3280504 0 1.28286145E+03 -2.01004501E+02'
>>> re.findall('\d+\.\d+E\+\d+|\+\d+\.\d+E\+\d+|-\d+\.\d+E\+\d+|\d+\.\d+|\d+',
s)
['3280504', '0',
'1.28286145E+03', '-2.01004501E+02']
>>>
'''
"""
>>> patt = re.compile(r'''\d+\.\d+E\+\d+|
... \d+\.\d+E\+\d+|
... -\d+\.\d+E\+\d+|
...
-\d+\.\d+E-\d+|
... \d+\.\d+E-\d+|
... \d+\.\d+|
... -\d+\.\d+|
... \d+''', re.X
... )
>>> patt
<_sre.
>>> s =
'Pnt * 3280311 0 +1.36567432E+03 -3.71226532E+02'
>>> re.findall(patt,s)
['3280311', '0',
'1.36567432E+03', '-3.71226532E+02']
>>> dd = {}
>>> lst = re.findall(patt,s)
>>> dd[int(lst[0])] = [float(i) for i in lst[1:]
if i != '0']
>>> dd
{3280311:
[1365.6743200000001, -371.22653200000002]}
>>> s1 =
'*
>>> lst1
= re.findall(patt,s)
>>> dd[int(lst[0])]
= dd[int(lst[0])]+[float(i) for i in lst1 if i != '0']
>>> dd
{3280311:
[1365.6743200000001, -371.22653200000002,
>>>
"""
"""
# ghostdog74
data = open('H:/TEMP/temsys/strdata.txt').read()
pat = re.compile("(\d+)
THRU (\d+)",re.M|re.DOTALL)
for items in pat.findall(data):
print items
'''
>>>
('880', '897')
('1001343',
'1001349')
('921', '932')
('1001323',
'1001331')
('1001343',
'1001349')
('1001359',
'1001365')
…………………………………..
"""