[问题] 请问解压缩档案要如何读取?

楼主: alubasteve (poorguy)   2019-03-01 17:00:51
版上诸位先进好
我是程式语言新手
目前边看书边自学PYTHON
目前的问题是想要试着用PYTHON解压缩档案
但是不知为何PYTHON一直读不到档案
我的程式码是
import zipfile
files=zipfile.ZipFile("python.zip")
然后就出现错误讯息读不到档案
请问我到底做错什魔
我已经把档案放到出现的路径里头去
但是没用
而且错误讯息里头的路径是在lib
但是我已经有Lib所以资料夹名称会重复而行不通
作者: lajji (喇机)   2019-03-01 17:33:00
后面加'r'再试一次files=zipfile.ZipFile("python.zip", "r")
楼主: alubasteve (poorguy)   2019-03-01 17:42:00
我试过了,很抱歉没用,如果r前后有""的话还是找不到python.zip,可是我已经在Lib里头放了如果r没有"",则显示r没有被定义
作者: djshen (djshen)   2019-03-01 18:37:00
没人跟你说问别人之前先把错误讯息贴上来吗
作者: lajji (喇机)   2019-03-01 18:38:00
不然就是你zip档放错地方 请google绝对路径 相对路径
楼主: alubasteve (poorguy)   2019-03-01 19:07:00
给djshen,多谢提醒,我怕错误讯息太长,反而眼花给lajji,多谢你提醒,我改成在档名前追加绝对路径然后就成了,所以问题是出在我的相对路径抓不到files=zipfile.ZipFile("c:\python\python.zip")即可
作者: gmccntzx1 (o.O)   2019-03-01 19:27:00
不用怕讯息太长让其他人眼花,善用线上服务如:codepad, pastebin, gist 都可以让你一次把大量的讯息传上来你不给错误讯息的话,其他人可能还要花时间猜你实际上遇到的问题是什么,这样反而浪费大家时间又没效率,所以贴个讯息,何乐不为?而且,像是你碰到的这个问题,光是丢错误讯息最后一行提到的 Exception 内容就可以略知一二囉
楼主: alubasteve (poorguy)   2019-03-01 20:42:00
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>files=zipfile.ZipFile("python.zip")File "C:\Users\user\AppData\Local\Programs\\Python\Python37\lib\zipfile.py", line 1182, in __self.fp = io.open(file, filemode)FileNotFoundError: [Errno 2] No such fileor directory: 'python.zip'抱歉我弄巧成拙,请各位过目我碰到的问题讯息
作者: djshen (djshen)   2019-03-01 21:08:00
python command怎么下的
楼主: alubasteve (poorguy)   2019-03-01 21:44:00
import zipfilefiles=zipfile.ZipFile("python.zip")
作者: djshen (djshen)   2019-03-01 22:41:00
喔我是指command line
楼主: alubasteve (poorguy)   2019-03-01 22:45:00
给djshen,抱歉我不知道python command跟command line的差异,可以请你告诉我吗
作者: djshen (djshen)   2019-03-01 23:09:00
你是把code存在一个xx.py 然后用python xx.py执行?
作者: gmccntzx1 (o.O)   2019-03-01 23:48:00
看他上面个讯息有 `pyshell#3` ,应该是在 cmd 中直接执行的依原文来看,原 PO 应该是把读档的概念弄错。你要读档时,必须先知道要被读取的档案的路径,之后在呼叫 open或其他读档的指令时(如你现在要用的 zipfile )再把该档的路径放进去,而不是纯粹写个档案名称就好。如果还是不太清楚我所说的,你可以试试看用os.path.abspath() 去看你现在给的 'python.zip' 对于目前程式所读到的路径是什么。举个例,假设目前 os.getcwd() 的结果是 'C:\User\foo'那么 os.path.abspath('python.zip') 所解析出的路径就是 'C:\User\foo\python.zip'所以如果实际上你的 python.zip 不在 C:\User\foo 底下的话,那么程式当然会读不到档案而你要做的事情应该是把正确的档案路径传给 ZipFile ,而非把档案移到 '...\Python37\lib\' 底下
楼主: alubasteve (poorguy)   2019-03-02 00:14:00
给gmccntzx1,我就是这样做,我改成import zipfilezip_file=zipfile.ZipFile("C:\python\python.zip")追加绝对路径在档名之前之后就不会再出现错误讯息
作者: gmccntzx1 (o.O)   2019-03-02 00:22:00
收到,在你 19:14 的回应已经知道你解决了,我只是想告诉你不用因为怕错误讯息太多而不跟着文章附上来
楼主: alubasteve (poorguy)   2019-03-02 00:27:00
不会,很感谢你的热心解说顺便问一句,我试着全解压缩python.zip,但是似乎只能解压缩到原有路径C:\python,请问这样合理吗
作者: gmccntzx1 (o.O)   2019-03-02 00:38:00
参考官方文件 https://bit.ly/2Vos4hA ,你可以指定参数 path 作为解压缩的目的地
楼主: alubasteve (poorguy)   2019-03-02 00:40:00
import zipfilezip_file=zipfile.ZipFile("C:\python\python.zip")zip_file.extractall("C:\python")zip_file.close()上面没问题 ,但是第三行改成zip_file.extractall("C:\python\2") 就有问题Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>zip_file.extractall("C:\python\2")File "C:\Users\user\AppData\Local\Programs\\Python\Python37\lib\zipfile.py", line 1594,, in extractallself._extract_member(zipinfo, path, pwd)File "C:\Users\user\AppData\Local\Programs\\Python37\lib\zipfile.py", line 1640, in _extract_memberos.makedirs(upperdirs)File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\os.py", line 221,in makedirsmkdir(name, mode)OSError: [WinError 123] 档案名称、目录名称或磁盘区标签语法错误。: 'C:\\python\x02'
作者: gmccntzx1 (o.O)   2019-03-02 01:02:00
用一般字串表示路径时, `\` 要改为 `\\` ,也就是说你要写成 zip_file.extractall("C:\\python\\2")或着你可以改用 raw string,也就是改成zip_file.extractall(r"C:\python\2")详细差异可以 google python raw string另外,关于路径的串接,可以再看看 os.path.join() 和pathlib (for python 3)然后,你如果不想用 pastebin/codepad 贴文字的话,可以改成萤幕截图后上传到 imgur 再贴上来因为看你一行一行贴感觉很累...
楼主: alubasteve (poorguy)   2019-03-02 07:46:00
https://pastebin.com/2s74QxGR 请问这样方便吗不好意思我是第一次听说pastebin ,所以不大敢用刚才试用才知道还不算难
作者: gmccntzx1 (o.O)   2019-03-02 10:07:00
上面说“看你一行一行贴感觉很累”是在说:你花好几分钟把讯息慢慢贴上来,不会累吗? 所以才跟你说有什么现有的工具可以让你更方便啦 XD然后重点是,指解压缩到另一个路径的问题解决了吗?
作者: Raymond0710 (雷门)   2019-03-02 10:19:00
路径的\ 改成\\让别人了解你的问题很重要 辛苦推文大大
楼主: alubasteve (poorguy)   2019-03-02 13:27:00
感谢gmccntzx1开示,我两种路径的方法试过都OK了也试过直接解压缩在新路径资料夹上也谢谢前文诸位网友指教,让我可以快速抓到盲点在哪我上午出门所以回复的比较晚,请gmccntzx1多包涵
作者: gmccntzx1 (o.O)   2019-03-02 17:24:00
不用在意,问题有解决就好!

Links booklink

Contact Us: admin [ a t ] ucptt.com