鱼C论坛

 找回密码
 立即注册
查看: 890|回复: 1

[技术交流] python中关于unicode转中文 和 字符串读取行 和 精度问题

[复制链接]
发表于 2018-9-28 01:29:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 RIXO 于 2018-9-30 09:32 编辑

python3 中 str 类型 默认是 unicode        bytes类型存储bytes数据     实际上就是如果你使用encode('utf-8')之类的命令实际上得到的是一个字节类型的数据,编码格式为utf-8

不过,我要说得不是这个

由于python3 中这样的特性,当你遇到一个   
str1 =   \u4e8c\u6b21\u611f\u5192\u771f\u7684\u592a\u53ef\u6015
这样的数据就很头痛

因为字符串默认是unicode编码  所以他没有解码,所有的解码实际上都是解成unicode 码

那么能编成其他的编码,然后显示吗?事实上编是能编的,但并没有卵用,反正编出来都不是中文

这样的解决方法,要么就在一开始,爬取的时候就指定好解码   r.encoding = 'unicode-escape'

要么就只能保存文件之后用      

str1  =  str1.encode('utf-8').decode('unicode-escape')

这样才能显示成中文

另外 在使用 requests 库时
response.text   是直接全部写到内存中的  所以会造成卡顿,但我们又不能像对待文件那样用for循环直接循环,因为response.text 是一个字符串
一个解决办法是这样的
自己写一个函数 ,当遇到  \n  的时候我们输出前面的语句,好像就和文件的for循环差不多了
start = 0
while True:
        a = r.text.find('\n',start)
        if a != -1:
                start += a
                print(r.text[:start])
        else:
                print(r.text[start:])
                break

不过我一开始没想到
所以我把r.text保存到了文件中然后在把它读取出来,这个要比上面的效率高,可能别人写的代码厉害吧
或许这就是我和大佬之间的差距

round(3.1234123,3)
-->3.12
函数可以按照精度输出,但不是四舍五入

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-28 02:44:22 | 显示全部楼层
呃,我又写了个函数递归,更快一些
  1. def fun1(start):
  2.         a = r.text.find('\n',start)
  3.         if a != -1:
  4.                 print(r.text[:start])
  5.                 return fun1(start+a)
  6.         else:
  7.                 print(r.text[start:])
  8.                 return None
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表