4
4
import numpy as np
5
5
import pandas as pd
6
6
from collections import defaultdict
7
+ from contextlib import contextmanager
8
+ from io import StringIO
9
+ from itertools import islice
10
+
7
11
8
12
sys_byteorder = ('>' , '<' )[sys .byteorder == 'little' ]
9
13
@@ -132,8 +136,13 @@ def read_ply(filename, allow_bool=False):
132
136
133
137
names = [x [0 ] for x in dtypes ["vertex" ]]
134
138
135
- data ["points" ] = pd .read_csv (filename , sep = " " , header = None , engine = "python" ,
136
- skiprows = top , skipfooter = bottom , usecols = names , names = names )
139
+ with open (filename , 'r' ) as f :
140
+ lines = f .readlines ()
141
+
142
+ with _file_from_lines (lines , top , len (lines ) - bottom ) as f :
143
+ data ["points" ] = pd .read_csv (
144
+ f , sep = " " , header = None , usecols = names , names = names
145
+ )
137
146
138
147
for n , col in enumerate (data ["points" ].columns ):
139
148
data ["points" ][col ] = data ["points" ][col ].astype (
@@ -146,8 +155,10 @@ def read_ply(filename, allow_bool=False):
146
155
usecols = [1 , 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 ] if has_texture else [1 , 2 , 3 ]
147
156
names = names [usecols ]
148
157
149
- data ["mesh" ] = pd .read_csv (
150
- filename , sep = " " , header = None , engine = "python" , skiprows = top , usecols = usecols , names = names )
158
+ with _file_from_lines (lines , top ) as f :
159
+ data ["mesh" ] = pd .read_csv (
160
+ f , sep = " " , header = None , usecols = usecols , names = names
161
+ )
151
162
152
163
for n , col in enumerate (data ["mesh" ].columns ):
153
164
data ["mesh" ][col ] = data ["mesh" ][col ].astype (
@@ -261,3 +272,11 @@ def describe_element(name, df):
261
272
element .append ('property ' + f + ' ' + df .columns .values [i ])
262
273
263
274
return element
275
+
276
+
277
+ @contextmanager
278
+ def _file_from_lines (lines , start = None , stop = None ):
279
+ with StringIO () as f :
280
+ f .writelines ("" .join (islice (lines , start , stop )))
281
+ f .seek (0 )
282
+ yield f
0 commit comments