作者busystudent (busystudent)
看板Python
標題[問題] 該如何把所有output存成a.txt檔
時間Tue Apr 26 20:13:42 2016
謝謝幾位網友,想再請教關於把所有結果存成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://webptt.com/m.aspx?n=bbs/Python/M.1461672826.A.5BF.html
1F:推 tiefblau: 直接print到檔案 如果是py2 print >> f, i 04/26 20:17
2F:→ tiefblau: py3: print(i, file=f) 或是執行的時候直接重導向 04/26 20:18
3F:→ busystudent: 可以再說明清楚一點嗎?我是用py2 04/26 20:19
4F:→ busystudent: print >>f,i是指什麼? 04/26 20:20
6F:→ MOONY135: a=i是多餘的吧 04/26 21:52
※ 編輯: 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
7F:→ checkIO: str(d) 04/26 23:28
8F:→ checkIO: 基本上error資訊丟去Google就有解答的事情了 04/26 23:31
9F:推 aweimeow: 第一個問題:改用codecs.open('abc.txt', 'w', 'utf-8') 04/26 23:31
10F:→ aweimeow: 記得要 import codecs 哦 04/26 23:31
11F:→ aweimeow: 然後第二個問題就如同上面 c大 所說 04/26 23:32
12F:→ aweimeow: 他錯誤訊息就寫著 float 不能 和 str 結合 04/26 23:32
13F:→ aweimeow: 所以你可以把 float 轉成 string 或是 "%f\n" % d 04/26 23:32
14F:→ busystudent: 感謝留言,所以第一個問題可以推測是txt不支援utf-8` 04/26 23:35
15F:→ busystudent: ,要多宣告嗎? 04/26 23:35
16F:→ checkIO: 編碼問題 抓下來可能是無法辨識的 04/26 23:37
17F:→ checkIO: 因為你一開始宣告是utf8 不然把utf8那行拿掉試試看 04/26 23:39
18F:→ busystudent: 等等 我忽然想到那我要開始就宣告萬國碼 04/26 23:41
19F:→ busystudent: 問題會解決嗎? 04/26 23:41
20F:推 aweimeow: 不會吧我覺得 04/26 23:48
21F:→ octantis: 你們是不是誤會了什麼,開頭宣告的utf8只是表示這份文件 04/27 00:09
22F:→ octantis: 要用哪種編碼來將py檔編成二進位檔,跟你的open一點關係 04/27 00:10
23F:→ octantis: 也沒有,你的open並write預設用的編碼是看sys模組裡的 04/27 00:11
24F:→ octantis: sys.getdefaultencoding(),它才是判斷你的資料該以何種 04/27 00:13
25F:→ octantis: 編碼編成二進位並寫入文件。跟你用beautifulsoup抓進來 04/27 00:14
26F:→ octantis: 的資料也一點關係也沒有,BeautifulSoup會把抓到的資料 04/27 00:16
27F:→ octantis: 轉成Unicode不管資料原本是何種編碼,讀進來就是Unicode 04/27 00:16
28F:→ octantis: 此外開頭的宣告utf8只是'告訴'別人你這份py檔要用什麼編 04/27 00:21
29F:→ busystudent: 了解,感謝說明 04/27 00:21
30F:→ octantis: 碼,並不代表你實際的編碼,你也可以開頭宣告utf8,但把 04/27 00:21
31F:→ octantis: py檔存成ascii,因此在存檔時需特別注意你的存檔編碼跟 04/27 00:23
32F:→ octantis: py檔開頭的宣告是不是同一個,否則別人看你開頭是utf8但 04/27 00:24
33F:→ octantis: 你存成其他的就有可能出現py檔亂碼等情形 04/27 00:25
34F:推 krazy1101: 最近也遇到這問題 推 04/27 14:12