10
10
# =============
11
11
12
12
import csv
13
- import StringIO
13
+ from io import StringIO
14
14
15
15
# ==========
16
16
# classes
@@ -68,7 +68,7 @@ def get_lines(self, line_number, amount=1):
68
68
"""
69
69
lines = []
70
70
with open (self ._filepath ) as f :
71
- for x in xrange (amount ):
71
+ for x in range (amount ):
72
72
line_data = self ._lines [line_number ]
73
73
f .seek (line_data ['position' ])
74
74
lines .append (f .read (line_data ['length' ]))
@@ -84,17 +84,18 @@ def __init__(self, filepath, has_header=True, **kwargs):
84
84
:param has_header:
85
85
:param kwargs: endline_character='\n ', values_delimiter=',', quotechar='"', ignore_corrupt=False, ignore_blank_lines=True
86
86
"""
87
- super (CsvRandomAccessReader , self ).__init__ (filepath , kwargs .get ('endline_character' ,'\n ' ), kwargs .get ('ignore_blank_lines' , True ))
87
+ super (CsvRandomAccessReader , self ).__init__ (filepath , kwargs .get ('endline_character' , '\n ' ),
88
+ kwargs .get ('ignore_blank_lines' , True ))
88
89
self ._headers = None
89
90
self ._delimiter = kwargs .get ('values_delimiter' , ',' )
90
91
self ._quotechar = kwargs .get ('quotechar' , '"' )
91
92
self ._ignore_bad_lines = kwargs .get ('ignore_corrupt' , False )
92
93
self .has_header = has_header
93
94
if has_header :
94
95
dialect = self .MyDialect (self ._endline , self ._quotechar , self ._delimiter )
95
- b = StringIO . StringIO (self .get_lines (0 )[0 ])
96
+ b = StringIO (self .get_lines (0 )[0 ])
96
97
r = csv .reader (b , dialect )
97
- values = tuple (r . next ())
98
+ values = tuple (next (r ))
98
99
self ._headers = values
99
100
100
101
@property
@@ -113,9 +114,9 @@ def _get_line_values(self, line):
113
114
:return: tuple of str
114
115
"""
115
116
dialect = self .MyDialect (self ._endline , self ._quotechar , self ._delimiter )
116
- b = StringIO . StringIO (line )
117
+ b = StringIO (line )
117
118
r = csv .reader (b , dialect )
118
- values = tuple (r . next ())
119
+ values = tuple (next (r ))
119
120
if len (self ._headers ) != len (values ):
120
121
if not self ._ignore_bad_lines :
121
122
raise ValueError ("Corrupt csv - header and row have different lengths" )
@@ -135,10 +136,10 @@ def get_line_dicts(self, line_number, amount=1):
135
136
line_number += 1
136
137
lines = []
137
138
text_lines = self .get_lines (line_number , amount )
138
- for x in xrange (amount ):
139
+ for x in range (amount ):
139
140
vals = self ._get_line_values (text_lines [x ])
140
141
if vals is None :
141
- lines .append (dict (zip (self ._headers , range (len (self ._headers )))))
142
+ lines .append (dict (zip (self ._headers , list ( range (len (self ._headers ) )))))
142
143
else :
143
144
lines .append (dict (zip (self ._headers , vals )))
144
145
return lines
0 commit comments