版上諸位先進好
我是程式語言新手
目前邊看書邊自學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")
我試過了,很抱歉沒用,如果r前後有""的話還是找不到python.zip,可是我已經在Lib裡頭放了如果r沒有"",則顯示r沒有被定義
作者:
djshen (djshen)
2019-03-01 18:37:00沒人跟你說問別人之前先把錯誤訊息貼上來嗎
作者:
lajji (喇機)
2019-03-01 18:38:00不然就是你zip檔放錯地方 請google絕對路徑 相對路徑
給djshen,多謝提醒,我怕錯誤訊息太長,反而眼花給lajji,多謝你提醒,我改成在檔名前追加絕對路徑然後就成了,所以問題是出在我的相對路徑抓不到files=zipfile.ZipFile("c:\python\python.zip")即可
作者: gmccntzx1 (o.O) 2019-03-01 19:27:00
不用怕訊息太長讓其他人眼花,善用線上服務如:codepad, pastebin, gist 都可以讓你一次把大量的訊息傳上來你不給錯誤訊息的話,其他人可能還要花時間猜你實際上遇到的問題是什麼,這樣反而浪費大家時間又沒效率,所以貼個訊息,何樂不為?而且,像是你碰到的這個問題,光是丟錯誤訊息最後一行提到的 Exception 內容就可以略知一二囉
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:00python command怎麼下的
import zipfilefiles=zipfile.ZipFile("python.zip")
作者:
djshen (djshen)
2019-03-01 22:41:00喔我是指command line
給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\' 底下
給gmccntzx1,我就是這樣做,我改成import zipfilezip_file=zipfile.ZipFile("C:\python\python.zip")追加絕對路徑在檔名之前之後就不會再出現錯誤訊息
作者: gmccntzx1 (o.O) 2019-03-02 00:22:00
收到,在你 19:14 的回應已經知道你解決了,我只是想告訴你不用因為怕錯誤訊息太多而不跟著文章附上來
不會,很感謝你的熱心解說順便問一句,我試著全解壓縮python.zip,但是似乎只能解壓縮到原有路徑C:\python,請問這樣合理嗎
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 再貼上來因為看你一行一行貼感覺很累...
作者: gmccntzx1 (o.O) 2019-03-02 10:07:00
上面說「看你一行一行貼感覺很累」是在說:你花好幾分鐘把訊息慢慢貼上來,不會累嗎? 所以才跟你說有什麼現有的工具可以讓你更方便啦 XD然後重點是,指解壓縮到另一個路徑的問題解決了嗎?
路徑的\ 改成\\讓別人了解你的問題很重要 辛苦推文大大
感謝gmccntzx1開示,我兩種路徑的方法試過都OK了也試過直接解壓縮在新路徑資料夾上也謝謝前文諸位網友指教,讓我可以快速抓到盲點在哪我上午出門所以回覆的比較晚,請gmccntzx1多包涵
作者: gmccntzx1 (o.O) 2019-03-02 17:24:00
不用在意,問題有解決就好!