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: