Run test: Extract files using python

Test: ./art/test.py -b -r --optimizing --64
Change-Id: I678d8459034efa2c9cad97d5c2726be966679710
diff --git a/test/run-test b/test/run-test
index 5e4403c..c8827c5 100755
--- a/test/run-test
+++ b/test/run-test
@@ -24,6 +24,7 @@
 from shutil import copyfile
 from testrunner import env
 from typing import Optional
+from zipfile import ZipFile
 
 COLOR = (os.environ.get("LUCI_CONTEXT") == None)  # Disable colors on LUCI.
 COLOR_BLUE = '\033[94m' if COLOR else ''
@@ -934,15 +935,18 @@
   SHARD = "HiddenApi" if "hiddenapi" in TEST_NAME else m.group(1)
   if target_mode == "yes":
     zip_file = f"{ANDROID_HOST_OUT}/etc/art/art-run-test-target-data-shard{SHARD}.zip"
-    zip_entry = f"target/{TEST_NAME}"
+    zip_entry = f"target/{TEST_NAME}/"
   elif runtime == "jvm":
     zip_file = f"{ANDROID_HOST_OUT}/etc/art/art-run-test-jvm-data-shard{SHARD}.zip"
-    zip_entry = f"jvm/{TEST_NAME}"
+    zip_entry = f"jvm/{TEST_NAME}/"
   else:
     zip_file = f"{ANDROID_HOST_OUT}/etc/art/art-run-test-host-data-shard{SHARD}.zip"
-    zip_entry = f"host/{TEST_NAME}"
-  run(f'unzip -q "{zip_file}" "{zip_entry}/*" -d "{tmp_dir}/.unzipped"')
-  run(f'mv "{tmp_dir}"/.unzipped/{zip_entry}/* "{tmp_dir}"')
+    zip_entry = f"host/{TEST_NAME}/"
+  zip = ZipFile(zip_file, "r")
+  zip_entries = [e for e in zip.namelist() if e.startswith(zip_entry)]
+  zip.extractall(Path(tmp_dir) / ".unzipped", members=zip_entries)
+  for entry in (Path(tmp_dir) / ".unzipped" / zip_entry).iterdir():
+    entry.rename(Path(tmp_dir) / entry.name)
 
   def clean_up(passed: bool):
     if always_clean == "yes" or (passed and never_clean == "no"):