|
12 | 12 | import pandas.util.testing as tm
|
13 | 13 | import pandas.util._test_decorators as td
|
14 | 14 |
|
| 15 | +import gzip |
| 16 | +import bz2 |
| 17 | +try: |
| 18 | + lzma = compat.import_lzma() |
| 19 | +except ImportError: |
| 20 | + lzma = None |
| 21 | + |
15 | 22 |
|
16 | 23 | class CompressionTests(object):
|
17 | 24 |
|
@@ -64,83 +71,36 @@ def test_zip(self):
|
64 | 71 | pytest.raises(zipfile.BadZipfile, self.read_csv,
|
65 | 72 | f, compression='zip')
|
66 | 73 |
|
67 |
| - def test_gzip(self): |
68 |
| - import gzip |
69 |
| - |
70 |
| - with open(self.csv1, 'rb') as data_file: |
71 |
| - data = data_file.read() |
72 |
| - expected = self.read_csv(self.csv1) |
73 |
| - |
74 |
| - with tm.ensure_clean() as path: |
75 |
| - tmp = gzip.GzipFile(path, mode='wb') |
76 |
| - tmp.write(data) |
77 |
| - tmp.close() |
78 |
| - |
79 |
| - result = self.read_csv(path, compression='gzip') |
80 |
| - tm.assert_frame_equal(result, expected) |
81 |
| - |
82 |
| - with open(path, 'rb') as f: |
83 |
| - result = self.read_csv(f, compression='gzip') |
84 |
| - tm.assert_frame_equal(result, expected) |
85 |
| - |
86 |
| - with tm.ensure_clean('test.gz') as path: |
87 |
| - tmp = gzip.GzipFile(path, mode='wb') |
88 |
| - tmp.write(data) |
89 |
| - tmp.close() |
90 |
| - result = self.read_csv(path, compression='infer') |
91 |
| - tm.assert_frame_equal(result, expected) |
92 |
| - |
93 |
| - def test_bz2(self): |
94 |
| - import bz2 |
| 74 | + @pytest.mark.parametrize('compress_type, compress_method, ext', [ |
| 75 | + ('gzip', gzip.GzipFile, 'gz'), |
| 76 | + ('bz2', bz2.BZ2File, 'bz2'), |
| 77 | + pytest.param('xz', getattr(lzma, 'LZMAFile', None), 'xz', |
| 78 | + marks=td.skip_if_no_lzma) |
| 79 | + ]) |
| 80 | + def test_other_compression(self, compress_type, compress_method, ext): |
95 | 81 |
|
96 | 82 | with open(self.csv1, 'rb') as data_file:
|
97 | 83 | data = data_file.read()
|
98 | 84 | expected = self.read_csv(self.csv1)
|
99 | 85 |
|
100 | 86 | with tm.ensure_clean() as path:
|
101 |
| - tmp = bz2.BZ2File(path, mode='wb') |
| 87 | + tmp = compress_method(path, mode='wb') |
102 | 88 | tmp.write(data)
|
103 | 89 | tmp.close()
|
104 | 90 |
|
105 |
| - result = self.read_csv(path, compression='bz2') |
| 91 | + result = self.read_csv(path, compression=compress_type) |
106 | 92 | tm.assert_frame_equal(result, expected)
|
107 | 93 |
|
108 |
| - pytest.raises(ValueError, self.read_csv, |
109 |
| - path, compression='bz3') |
| 94 | + if compress_type == 'bz2': |
| 95 | + pytest.raises(ValueError, self.read_csv, |
| 96 | + path, compression='bz3') |
110 | 97 |
|
111 | 98 | with open(path, 'rb') as fin:
|
112 |
| - result = self.read_csv(fin, compression='bz2') |
113 |
| - tm.assert_frame_equal(result, expected) |
114 |
| - |
115 |
| - with tm.ensure_clean('test.bz2') as path: |
116 |
| - tmp = bz2.BZ2File(path, mode='wb') |
117 |
| - tmp.write(data) |
118 |
| - tmp.close() |
119 |
| - result = self.read_csv(path, compression='infer') |
120 |
| - tm.assert_frame_equal(result, expected) |
121 |
| - |
122 |
| - @td.skip_if_no_lzma |
123 |
| - def test_xz(self): |
124 |
| - lzma = compat.import_lzma() |
125 |
| - |
126 |
| - with open(self.csv1, 'rb') as data_file: |
127 |
| - data = data_file.read() |
128 |
| - expected = self.read_csv(self.csv1) |
129 |
| - |
130 |
| - with tm.ensure_clean() as path: |
131 |
| - tmp = lzma.LZMAFile(path, mode='wb') |
132 |
| - tmp.write(data) |
133 |
| - tmp.close() |
134 |
| - |
135 |
| - result = self.read_csv(path, compression='xz') |
136 |
| - tm.assert_frame_equal(result, expected) |
137 |
| - |
138 |
| - with open(path, 'rb') as f: |
139 |
| - result = self.read_csv(f, compression='xz') |
| 99 | + result = self.read_csv(fin, compression=compress_type) |
140 | 100 | tm.assert_frame_equal(result, expected)
|
141 | 101 |
|
142 |
| - with tm.ensure_clean('test.xz') as path: |
143 |
| - tmp = lzma.LZMAFile(path, mode='wb') |
| 102 | + with tm.ensure_clean('test.{}'.format(ext)) as path: |
| 103 | + tmp = compress_method(path, mode='wb') |
144 | 104 | tmp.write(data)
|
145 | 105 | tmp.close()
|
146 | 106 | result = self.read_csv(path, compression='infer')
|
|
0 commit comments