You drop a project.zip of 30 source files into a chat, ask “summarize the contents,” and ChatGPT either says it can’t open archives, treats the ZIP as a binary blob, or simply doesn’t try. The cause is layered: regular chat treats archives as opaque, Code Interpreter (Advanced Data Analysis) can extract them but only when you explicitly ask, and some account tiers have file-type filters that reject ZIP outright. The fastest fix is to unzip locally and upload individual files, or open a Code Interpreter session and ask for unzip-and-list explicitly.
Common causes
1. Regular chat mode does not run code
Without Code Interpreter, ChatGPT cannot execute unzip. It can read text from a directly uploaded TXT / PDF / DOCX, but a ZIP is binary and requires a sandbox to extract. Asking “what’s inside this zip” in a non-Code-Interpreter chat will get a polite refusal or a hallucinated guess.
How to spot it: No “Analyzing…” indicator, no Python tool icon — pure chat mode. Reply is a generic “I can’t open archives” rather than a Python traceback.
2. Code Interpreter is available but you did not invoke it
Even on Plus, you may need to ask explicitly. Asking “summarize this zip” sometimes triggers the file-summary path which doesn’t unzip. Asking “use Python to unzip this file and list its contents” reliably opens Code Interpreter.
How to spot it: ChatGPT can analyze CSVs in other chats, but for this ZIP it never opens the Python tool.
3. File type filter rejected the upload
Some account types, school / workplace deployments, and DLP-flagged accounts block .zip, .exe, .gz at upload. The file appears to attach but Code Interpreter sees a stub or nothing.
How to spot it: Asking os.listdir("/mnt/data") returns no file matching your ZIP name, or shows a 0-byte placeholder.
4. Archive uses unsupported format or is encrypted
ZIP is fine. .rar, .7z, encrypted ZIPs, and split archives (.zip.001, .zip.002) fail in the sandbox because unzip doesn’t ship with RAR / 7z support and won’t prompt for a password.
How to spot it: Python output says BadZipFile, RarCannotExec, or RuntimeError: ... encrypted.
5. Archive too large for the sandbox disk
The Code Interpreter sandbox has limited tmp storage. A 2GB ZIP that decompresses to 8GB fills the disk and the extract fails partway through.
Shortest path to fix
Step 1: Confirm Code Interpreter is active
Use a model that supports it (GPT-5, GPT-5.5, o3 in code mode) and start the message with an explicit unzip request:
Use Python to unzip this file to /tmp/extracted, then list every file
with its size, and print the first 30 lines of any .md or .txt file
at the top level.
You should see the Python tool icon spin. If not, the model isn’t in code mode — switch model or re-prompt.
Step 2: Use a known-good unzip snippet
If the automatic approach fails, paste this directly:
import zipfile, os
src = "/mnt/data/project.zip"
dst = "/tmp/extracted"
os.makedirs(dst, exist_ok=True)
with zipfile.ZipFile(src) as z:
z.extractall(dst)
for info in z.infolist():
print(info.filename, info.file_size)
This works on any standard non-encrypted ZIP and prints the file tree.
Step 3: For encrypted ZIPs, supply the password
import zipfile
with zipfile.ZipFile("/mnt/data/secure.zip") as z:
z.extractall("/tmp/extracted", pwd=b"yourPassword")
The password goes in the prompt — be aware ChatGPT may log this. Strip it from the file first if it is sensitive.
Step 4: For RAR / 7z, convert locally before uploading
Code Interpreter does not have unrar or 7z. On your machine:
# macOS
brew install p7zip
7z x archive.7z
# then re-zip if you still want one file
zip -r project.zip extracted/
Upload the new .zip, or upload the extracted files directly.
Step 5: For very large archives, unzip locally and upload selectively
If the archive is > 100MB or decompresses to multiple GB, do not upload the ZIP at all. Unzip on your machine, pick the 5-20 files actually relevant to the question, and upload only those. You save sandbox disk, save tokens, and ChatGPT analyzes the right files immediately.
How to confirm the fix
After your unzip command runs, verify with:
import os
for root, dirs, files in os.walk("/tmp/extracted"):
for f in files:
path = os.path.join(root, f)
size = os.path.getsize(path)
print(f"{size:>10} {path}")
You should see every file from the archive with non-zero sizes. Then ask ChatGPT to read or summarize a specific file by path — confirms the sandbox can actually open the extracted content.
Prevention
- Default to uploading individual files instead of archives. ChatGPT’s analysis quality is higher when each file is named and accessible from the start.
- When you must upload a ZIP, write the message in this template: “Use Python to unzip
<name>.zipto/tmp/extracted, list contents, then answer:<question>.” This guarantees Code Interpreter fires. - Avoid RAR / 7z when sharing with LLMs — convert to ZIP first.
- For source code review, prefer pasting the file tree as text plus the 3-5 most relevant files inline, rather than a 200-file ZIP.
- For very large datasets, sample first: extract 1000 rows or 50 files locally and upload that subset.