作者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/cn.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