[問題] 該如何把所有output存成a.txt檔

看板Python作者 (busystudent)時間8年前 (2016/04/26 20:13), 8年前編輯推噓5(5029)
留言34則, 7人參與, 最新討論串1/2 (看更多)
謝謝幾位網友,想再請教關於把所有結果存成a.txt檔的問題。 抱歉,敘述不好 修改文章,還請各位指點 2016/4/26 pm11:05 主程式碼 http://dpaste.com/1QE1JPW 我打算把我所寫的程式碼,跑出來的output存成txt檔,但是有幾行出錯了,想跟大家請 教,你可以觀看我程式碼第65行,如下所示 f.write(tag+"\n") 他跳出了錯誤UnicodeEncodeError: 'ascii' codec can't encode character 我不知道該如何修正,是我忘記宣告utf-8嗎? 可是我前述第一行有宣告了 第二個問題是主程式碼的 第74行,d = float (c)/((a+b)-c) 第75行,f.write(d+"\n") 報錯內容為: TypeError: unsupported operand type(s) for +: 'float' and 'str' 因為這兩個問題,造成我無法存成txt檔,還請各位指點,謝謝 -- Sent from my Windows -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.95.247 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1461672826.A.5BF.html

04/26 20:17, , 1F
直接print到檔案 如果是py2 print >> f, i
04/26 20:17, 1F

04/26 20:18, , 2F
py3: print(i, file=f) 或是執行的時候直接重導向
04/26 20:18, 2F

04/26 20:19, , 3F
可以再說明清楚一點嗎?我是用py2
04/26 20:19, 3F

04/26 20:20, , 4F
print >>f,i是指什麼?
04/26 20:20, 4F

04/26 20:39, , 5F

04/26 21:52, , 6F
a=i是多餘的吧
04/26 21:52, 6F
※ 編輯: busystudent (1.172.95.247), 04/26/2016 23:02:45 ※ 編輯: busystudent (1.172.95.247), 04/26/2016 23:07:06 ※ 編輯: busystudent (1.172.95.247), 04/26/2016 23:12:41

04/26 23:28, , 7F
str(d)
04/26 23:28, 7F

04/26 23:31, , 8F
基本上error資訊丟去Google就有解答的事情了
04/26 23:31, 8F

04/26 23:31, , 9F
第一個問題:改用codecs.open('abc.txt', 'w', 'utf-8')
04/26 23:31, 9F

04/26 23:31, , 10F
記得要 import codecs 哦
04/26 23:31, 10F

04/26 23:32, , 11F
然後第二個問題就如同上面 c大 所說
04/26 23:32, 11F

04/26 23:32, , 12F
他錯誤訊息就寫著 float 不能 和 str 結合
04/26 23:32, 12F

04/26 23:32, , 13F
所以你可以把 float 轉成 string 或是 "%f\n" % d
04/26 23:32, 13F

04/26 23:35, , 14F
感謝留言,所以第一個問題可以推測是txt不支援utf-8`
04/26 23:35, 14F

04/26 23:35, , 15F
,要多宣告嗎?
04/26 23:35, 15F

04/26 23:37, , 16F
編碼問題 抓下來可能是無法辨識的
04/26 23:37, 16F

04/26 23:39, , 17F
因為你一開始宣告是utf8 不然把utf8那行拿掉試試看
04/26 23:39, 17F

04/26 23:41, , 18F
等等 我忽然想到那我要開始就宣告萬國碼
04/26 23:41, 18F

04/26 23:41, , 19F
問題會解決嗎?
04/26 23:41, 19F

04/26 23:48, , 20F
不會吧我覺得
04/26 23:48, 20F

04/27 00:09, , 21F
你們是不是誤會了什麼,開頭宣告的utf8只是表示這份文件
04/27 00:09, 21F

04/27 00:10, , 22F
要用哪種編碼來將py檔編成二進位檔,跟你的open一點關係
04/27 00:10, 22F

04/27 00:11, , 23F
也沒有,你的open並write預設用的編碼是看sys模組裡的
04/27 00:11, 23F

04/27 00:13, , 24F
sys.getdefaultencoding(),它才是判斷你的資料該以何種
04/27 00:13, 24F

04/27 00:14, , 25F
編碼編成二進位並寫入文件。跟你用beautifulsoup抓進來
04/27 00:14, 25F

04/27 00:16, , 26F
的資料也一點關係也沒有,BeautifulSoup會把抓到的資料
04/27 00:16, 26F

04/27 00:16, , 27F
轉成Unicode不管資料原本是何種編碼,讀進來就是Unicode
04/27 00:16, 27F

04/27 00:21, , 28F
此外開頭的宣告utf8只是'告訴'別人你這份py檔要用什麼編
04/27 00:21, 28F

04/27 00:21, , 29F
了解,感謝說明
04/27 00:21, 29F

04/27 00:21, , 30F
碼,並不代表你實際的編碼,你也可以開頭宣告utf8,但把
04/27 00:21, 30F

04/27 00:23, , 31F
py檔存成ascii,因此在存檔時需特別注意你的存檔編碼跟
04/27 00:23, 31F

04/27 00:24, , 32F
py檔開頭的宣告是不是同一個,否則別人看你開頭是utf8但
04/27 00:24, 32F

04/27 00:25, , 33F
你存成其他的就有可能出現py檔亂碼等情形
04/27 00:25, 33F

04/27 14:12, , 34F
最近也遇到這問題 推
04/27 14:12, 34F
文章代碼(AID): #1N7rjwM_ (Python)
文章代碼(AID): #1N7rjwM_ (Python)