44from datetime import datetime
55import collections
66import pytest
7- import gzip
8- import bz2
9- import lzma
107
118import numpy as np
129import pandas as pd
1310
14- from pandas import Series , DataFrame
11+ from pandas import Series , DataFrame , compat
1512
1613from pandas .compat import StringIO , u
1714from pandas .util .testing import (assert_series_equal , assert_almost_equal ,
@@ -142,12 +139,31 @@ def test_to_csv_path_is_none(self):
142139 csv_str = s .to_csv (path = None )
143140 assert isinstance (csv_str , str )
144141
145- @pytest .mark .parametrize ('compression, open_func' , [
146- ('gzip' , gzip .open ),
147- ('bz2' , bz2 .BZ2File ),
148- (pytest .param ('xz' , lzma .open , marks = td .skip_if_no_lzma )),
142+ def decompress_file (self , src_path , compression ):
143+ if compression is None :
144+ f = open (src_path , 'rb' )
145+ elif compression == 'gzip' :
146+ import gzip
147+ f = gzip .open (src_path , 'rb' )
148+ elif compression == 'bz2' :
149+ import bz2
150+ f = bz2 .BZ2File (src_path , 'rb' )
151+ elif compression == 'xz' :
152+ lzma = compat .import_lzma ()
153+ f = lzma .LZMAFile (src_path , 'rb' )
154+ else :
155+ msg = 'Unrecognized compression type: {}' .format (compression )
156+ raise ValueError (msg )
157+
158+ return f
159+
160+ @pytest .mark .parametrize ('compression' , [
161+ None ,
162+ 'gzip' ,
163+ 'bz2' ,
164+ pytest .param ('xz' , marks = td .skip_if_no_lzma ),
149165 ])
150- def test_to_csv_compression (self , compression , open_func ):
166+ def test_to_csv_compression (self , compression ):
151167
152168 s = Series ([0.123456 , 0.234567 , 0.567567 ], index = ['A' , 'B' , 'C' ],
153169 name = 'X' )
@@ -161,15 +177,14 @@ def test_to_csv_compression(self, compression, open_func):
161177 squeeze = True )
162178 assert_series_equal (s , rs )
163179
164- # explicitly make sure file is compressed
165- f = open_func (filename , 'rb' )
180+ # explicitly ensure file was compressed
181+ f = self . decompress_file (filename , compression = compression )
166182 text = f .read ().decode ('utf8' )
167183 assert s .name in text
184+ f .close ()
168185
169- f = open_func (filename , 'rb' )
170- assert_series_equal (s , pd .read_csv (f , index_col = 0 ,
171- squeeze = True ))
172-
186+ f = self .decompress_file (filename , compression = compression )
187+ assert_series_equal (s , pd .read_csv (f , index_col = 0 , squeeze = True ))
173188 f .close ()
174189
175190
0 commit comments