Python读取pickle文件报错:IOError [Errno 0]及EOFError求助
Hmm, that Errno 0 error is tricky—it usually points to low-level issues with the file itself or system-level access problems, not just the open mode you’re using. Let’s work through the possible fixes step by step:
1. First, Verify the File Basics
- Double-check the file path: Make sure
./Aeolis_data/AeolisTimeStamp.pck1is spelled correctly. Is the extension supposed to be.pklinstead of.pck1? Typos here can cause weird, unhelpful errors. - Check if the file is corrupted: If this file was copied, downloaded, or generated by another process, it might be incomplete. Try opening it with a text editor (like Notepad++ or Vim):
- If it’s unreadable or the editor throws an error, the file is likely damaged—you’ll need to get a fresh copy or regenerate it.
- If it shows garbled text (expected for pickle files), move on to the next steps.
2. Fix Your Pickle Usage (You’ve Got the Mode/Order Wrong!)
Your original code has a critical mistake: you’re opening the file in write mode (wt) then trying to read from it with pickle.load(). That’s backwards! Pickle requires specific modes for reading/writing binary data:
- For reading a pickle file, always use
rb(read binary) mode. Here’s the correct code:import pickle # Use a context manager (with statement) to handle file closing automatically with open('./Aeolis_data/AeolisTimeStamp.pck1', 'rb') as fd: prevTimeStamp = pickle.load(fd) - The EOFError you saw with
rbmode usually means the file is empty or truncated—pickle can’t find the end-of-file marker it expects. That ties back to the file corruption or incomplete generation issue.
3. Rule Out System-Level Issues
Errno 0 often stems from system-specific problems, not the code itself:
- Permission checks: Try running your script as an administrator/superuser—you might not have read access to the file or directory.
- Check for locked files: If another program (like a file explorer, editor, or another script) is using the file, your Python process might not be able to access it. Close all other apps that could be touching the file.
- Use absolute paths: Relative paths can sometimes cause issues (especially on Windows). Replace
./Aeolis_data/...with a full path likeC:/Users/YourUsername/Aeolis_data/AeolisTimeStamp.pck1(use forward slashes or double backslashes on Windows).
4. Handle Pickle Version Compatibility
If the file was created with a different Python version:
- If it’s a Python 2 pickle opened in Python 3, try adding an encoding parameter:
with open('./Aeolis_data/AeolisTimeStamp.pck1', 'rb') as fd: prevTimeStamp = pickle.load(fd, encoding='latin1') - For newer Python versions, you might need to use
pickle.Unpicklerwith specific settings if the file was serialized with a protocol version your current Python doesn’t support by default.
5. Regenerate the File (If Possible)
If you or someone else created this file with pickle.dump(), verify the original write code was correct. It should use wb (write binary) mode:
import pickle # Example of correctly saving the variable prevTimeStamp = {"some": "data"} # Replace with your actual variable with open('./Aeolis_data/AeolisTimeStamp.pck1', 'wb') as fd: pickle.dump(prevTimeStamp, fd)
内容的提问来源于stack exchange,提问作者Esmee

