Revert changes to zip error messages · pandas-dev/pandas@89e45f4 (original) (raw)
2 files changed
lines changed
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -336,12 +336,16 @@ def _get_handle(path_or_buf, mode, encoding=None, compression=None, | ||
336 | 336 | elif compression == 'zip': |
337 | 337 | import zipfile |
338 | 338 | zip_file = zipfile.ZipFile(path_or_buf) |
339 | -try: | |
340 | -name, = zip_file.namelist() | |
341 | -except ValueError: | |
342 | -raise ValueError('Zip file must contain exactly one file {}' | |
339 | +zip_names = zip_file.namelist() | |
340 | +if len(zip_names) == 1: | |
341 | +f = zip_file.open(zip_names.pop()) | |
342 | +elif len(zip_names) == 0: | |
343 | +raise ValueError('Zero files found in ZIP file {}' | |
343 | 344 | .format(path_or_buf)) |
344 | -f = zip_file.open(name) | |
345 | +else: | |
346 | +raise ValueError('Multiple files found in ZIP file.' | |
347 | +' Only one file per ZIP: {}' | |
348 | + .format(zip_names)) | |
345 | 349 | |
346 | 350 | # XZ Compression |
347 | 351 | elif compression == 'xz': |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -45,17 +45,17 @@ def test_zip(self): | ||
45 | 45 | tmp.writestr(file_name, data) |
46 | 46 | tmp.close() |
47 | 47 | |
48 | -self.assertRaisesRegexp(ValueError, 'must contain exactly one file', | |
48 | +self.assertRaisesRegexp(ValueError, 'Multiple files', | |
49 | 49 | self.read_csv, path, compression='zip') |
50 | 50 | |
51 | -self.assertRaisesRegexp(ValueError, 'must contain exactly one file', | |
51 | +self.assertRaisesRegexp(ValueError, 'Multiple files', | |
52 | 52 | self.read_csv, path, compression='infer') |
53 | 53 | |
54 | 54 | with tm.ensure_clean() as path: |
55 | 55 | tmp = zipfile.ZipFile(path, mode='w') |
56 | 56 | tmp.close() |
57 | 57 | |
58 | -self.assertRaisesRegexp(ValueError, 'must contain exactly one file', | |
58 | +self.assertRaisesRegexp(ValueError, 'Zero files', | |
59 | 59 | self.read_csv, path, compression='zip') |
60 | 60 | |
61 | 61 | with tm.ensure_clean() as path: |