|
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