• 关于

    python是什么文件格式

    的搜索结果

问题

【精品问答】python五十问第一期

谁能想到60%开发者想要学习的python,竟然诞生于80年代的圣诞节期间。 在阿里斯特丹,百无聊赖的Guido决心开发继承ABC语言的脚本解释程序。就这样,python在Guido的手中诞生了...
问问小秘 2019-12-01 21:51:26 977 浏览量 回答数 1

问题

什么是python文件格式

什么是python文件格式...
云计算小粉 2019-12-01 19:59:34 462 浏览量 回答数 1

问题

python是什么文件格式

python是什么文件格式...
云计算小粉 2019-12-01 19:58:47 421 浏览量 回答数 2

阿里云爆款特惠专场,精选爆款产品低至0.95折!

爆款ECS云服务器8.1元/月起,云数据库低至1.5折,限时抢购!

问题

python读csv是什么格式文件

python读csv是什么格式文件...
云计算小粉 2019-12-01 20:04:35 510 浏览量 回答数 2

问题

【python学习全家桶】263道python热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动:或许你挑灯夜战只为一道难题或许你百思不解只求一个答案或许你绞尽脑汁只因一种未知那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了他们用户自己手中的技术来帮助用户成长本次活动特邀百位阿里技术专家对python常见问题进...
管理贝贝 2019-12-01 20:07:21 7217 浏览量 回答数 2

问题

【精品问答】python技术1000问(1)

为了方便python开发者快速找到相关技术问题和答案,开发者社区策划了python技术1000问内容,包含最基础的如何学python、实践中遇到的技术问题、python面试等维度内容。 我们会以每天至少50条的...
问问小秘 2019-12-01 21:57:48 456417 浏览量 回答数 22

问题

如何将csv目录加载到hdfs作为parquet

我在linux上有一个包含数千个CSV文件的本地文件夹。每个csv文件大约为1mb。这些文件共享相同的列/格式,它们由文件名本身区分(即xxx_1.csv,xxx_2.csv,xxx_3,csv等)现在,我想将目录加载到HDFS中,并将其保...
社区小助手 2019-12-01 19:30:01 805 浏览量 回答数 1

问题

基础语言百问-Python

基础语言百问-Python 软件界最近非常流行一句话“人生苦短,快用Python”,这就展示出了Python的特点,那就是快,当然这个快并不是指的Python运行快,毕竟是脚本语言,再怎样也快不过C语言和C++这样的底层语言,这里的快指的是...
薯条酱 2019-12-01 20:12:27 56807 浏览量 回答数 30

回答

一、使用中文字符在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子:!/usr/bin/env python-- coding: cp936 --Python Tutorial中指出,python的源文件可以编码ASCII以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集:-- coding: encoding --根据这个声明,Python会尝试将文件中的字符编码转为encoding编码,并且,它尽可能的将指定地编码直接写成Unicode文本。 注意,coding:encoding只是告诉Python文件使用了encoding格式的编码,但是编辑器可能会以自己的方式存储.py文件,因此最后文件保存的时候还需要编码中选指定的ecoding才行。 二、中文字符的存储str = u"中文" str u'xd6xd0xcexc4' str = "中文" str'xd6xd0xcexc4' u"中文"只是声明unicode,实际的编码并没有变。这样子就发生变化了:str = "中文" str'xd6xd0xcexc4'str = str.decode("gb2312") stru'u4e2du6587' 更进一步:s = '中文' s.decode('gb2312')u'u4e2du6587'len(s)4len(s.decode('gb2312'))2s = u'中文' len(s)4s = '中文test' len(s)8len(s.decode('gb2312'))6s = '中文test,' len(s)10len(s.decode('gb2312'))7 可以看出,对于实际Non-ASCII编码存储的字符串,python可以正确的识别出其中的中文字符以及中文上下文中的标点符号。 前缀“u”表示“后面这个字符串“是一个Unicode字符串”,这仅仅是一个声明,并不表示这个字符串就真的是Unicode了;就好比某正太声称自己已满18岁,但实际上他的真实年龄并不确定,现在体育界年龄造假可不稀罕幺! 那么声明成u有什么作用呢?对于Python来说,只要你声明某字符串是Unicode,它就会用Unicode的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的Unicode处理函数,保存的时候以Unicode字符(双字节)进行保存。等等。显而易见,对于一个实际上并不是 Unicode的字符串,做Unicode动作的处理,是有可能会出问题的。 u前缀只适用于你的字符串常量真的是Unicode的情况 。
xuning715 2019-12-02 01:10:31 0 浏览量 回答数 0

回答

ReOSS上传大文件 OSS最大的文件可以到48TB左右(通过 multipart 上传的方式)。除了ftp4oss之外,你可以下载官方的python sdk里自带的工具osscmd上传一个目录下所有的文件。 (下载地址:http://aliyunecs.oss-cn-hangzhou.aliyuncs.com/OSS_Python_API_20140509.zip) 命令格式:       python ./osscmd uploadfromdir       localdir oss://bucket/[prefix] --check_point=check_point_file 可以加上 --key=<key> --id=<id> --host=<host> 来分别指定 access id, key和访问的host(如果在杭州ECS访问杭州内网的话,就可以用oss-cn-hangzhou-internal.aliyuncs.com) 其中--check_point选项指定了的话,就可以支持断点续传了 ------------------------- ReOSS上传大文件 能提供以下你是什么时间点执行这些操作的吗?还有 osscmd 具体的出错信息是什么?
deadbeef 2019-12-02 00:50:13 0 浏览量 回答数 0

问题

python的中文编码问题:报错

我很想就这个问题做个详细的解释,但也许水平有限,解释的不是很清楚,甚至自己理解的都不正确,那么我将长期修改 我使用pyscripter来作为编辑器,首先在pyscrit...
kun坤 2020-06-07 14:42:07 0 浏览量 回答数 1

问题

使用Python Flask或其他框架输出多行字符串

我正在尝试在服务器设置中使用Redhat kickstart文件并在python中对其进行修改。我的应用程序使用python来卷曲Redhat Satellite服务器中的原始kickstart文件,然后在kickstart文...
祖安文状元 2020-02-23 16:33:26 9 浏览量 回答数 2

问题

利用服务端的上传媒体文件成功后微应用发送的企业消息没办法显示文件名

各位大神好,我用的python弄的上传文件到这个接口,然后用获取到的mediaid 发送企业 消息给用户,用户可以收到并打开文件,但是显示的文件名却是 mediaid.xls 的格式。...
潇洒弟er 2019-12-01 21:14:25 2209 浏览量 回答数 1

回答

一、文件的打开和创建 ? 12345 f = open('/tmp/test.txt')f.read()'hello python!nhello world!n'f 二、文件的读取步骤:打开 -- 读取 -- 关闭 ? 1234 f = open('/tmp/test.txt')f.read() 'hello python!nhello world!n' f.close() 读取数据是后期数据处理的必要步骤。.txt是广泛使用的数据文件格式。一些.csv, .xlsx等文件可以转换为.txt 文件进行读取。我常使用的是Python自带的I/O接口,将数据读取进来存放在list中,然后再用numpy科学计算包将list的数据转换为array格式,从而可以像MATLAB一样进行科学计算。 下面是一段常用的读取txt文件代码,可以用在大多数的txt文件读取中 ? 12345678910111213141516 filename = 'array_reflection_2D_TM_vertical_normE_center.txt' # txt文件和当前脚本在同一目录下,所以不用写具体路径pos = []Efield = []with open(filename, 'r') as file_to_read: while True: lines = file_to_read.readline() # 整行读取数据 if not lines: break pass p_tmp, E_tmp = [float(i) for i in lines.split()] # 将整行数据分割处理,如果分割符是空格,括号里就不用传入参数,如果是逗号, 则传入‘,'字符。 pos.append(p_tmp) # 添加新读取的数据 Efield.append(E_tmp) pass pos = np.array(pos) # 将数据从list类型转换为array类型。 Efield = np.array(Efield) pass 例如下面是将要读入的txt文件 2016626171647895.png (429×301) 经过读取后,在Enthought Canopy的variable window查看读入的数据, 左侧为pos,右侧为Efield。 2016626171713978.png (148×277)2016626171743777.png (147×280) 三、文件写入(慎重,小心别清空原本的文件)步骤:打开 -- 写入 -- (保存)关闭 直接的写入数据是不行的,因为默认打开的是'r' 只读模式 ? 123456 f.write('hello boy')Traceback (most recent call last): File "", line 1, in IOError: File not open for writing f 应该先指定可写的模式 ? 12 f1 = open('/tmp/test.txt','w')f1.write('hello boy!') 但此时数据只写到了缓存中,并未保存到文件,而且从下面的输出可以看到,原先里面的配置被清空了 ? 12 [root@node1 ~]# cat /tmp/test.txt[root@node1 ~]# 关闭这个文件即可将缓存中的数据写入到文件中 ? 123 f1.close() [root@node1 ~]# cat /tmp/test.txt[root@node1 ~]# hello boy! 注意:这一步需要相当慎重,因为如果编辑的文件存在的话,这一步操作会先清空这个文件再重新写入。那么如果不要清空文件再写入该如何做呢? 使用r+ 模式不会先清空,但是会替换掉原先的文件,如下面的例子:hello boy! 被替换成hello aay! ? 12345 f2 = open('/tmp/test.txt','r+')f2.write('nhello aa!')f2.close() [root@node1 python]# cat /tmp/test.txthello aay! 如何实现不替换? ? 12345678 f2 = open('/tmp/test.txt','r+')f2.read() 'hello girl!' f2.write('nhello boy!')f2.close() [root@node1 python]# cat /tmp/test.txthello girl!hello boy! 可以看到,如果在写之前先读取一下文件,再进行写入,则写入的数据会添加到文件末尾而不会替换掉原先的文件。这是因为指针引起的,r+ 模式的指针默认是在文件的开头,如果直接写入,则会覆盖源文件,通过read() 读取文件后,指针会移到文件的末尾,再写入数据就不会有问题了。这里也可以使用a 模式 ? 12345678 f = open('/tmp/test.txt','a')f.write('nhello man!')f.close() [root@node1 python]# cat /tmp/test.txthello girl!hello boy!hello man! 关于其他模式的介绍,见下表: 2016626170852899.png (713×317) 文件对象的方法:f.readline() 逐行读取数据 方法一: ? 123456789 f = open('/tmp/test.txt')f.readline() 'hello girl!n' f.readline() 'hello boy!n' f.readline() 'hello man!' f.readline() '' 方法二: ? 123456789101112 for i in open('/tmp/test.txt'): ... print i...hello girl!hello boy!hello man!f.readlines() 将文件内容以列表的形式存放 f = open('/tmp/test.txt')f.readlines() ['hello girl!n', 'hello boy!n', 'hello man!'] f.close() f.next() 逐行读取数据,和f.readline() 相似,唯一不同的是,f.readline() 读取到最后如果没有数据会返回空,而f.next() 没读取到数据则会报错 ? 12345678910111213141516 f = open('/tmp/test.txt')f.readlines() ['hello girl!n', 'hello boy!n', 'hello man!'] f.close() f = open('/tmp/test.txt')f.next() 'hello girl!n' f.next() 'hello boy!n' f.next() 'hello man!' f.next() Traceback (most recent call last):File "", line 1, in StopIteration f.writelines() 多行写入 ? 1234567891011 l = ['nhello dear!','nhello son!','nhello baby!n']f = open('/tmp/test.txt','a')f.writelines(l)f.close() [root@node1 python]# cat /tmp/test.txthello girl!hello boy!hello man!hello dear!hello son!hello baby! f.seek(偏移量,选项) ? 12345678910111213141516 f = open('/tmp/test.txt','r+')f.readline() 'hello girl!n' f.readline() 'hello boy!n' f.readline() 'hello man!n' f.readline() ' ' f.close()f = open('/tmp/test.txt','r+')f.read() 'hello girl!nhello boy!nhello man!n' f.readline() '' f.close() 这个例子可以充分的解释前面使用r+这个模式的时候,为什么需要执行f.read()之后才能正常插入f.seek(偏移量,选项)(1)选项=0,表示将文件指针指向从文件头部到“偏移量”字节处 (2)选项=1,表示将文件指针指向从文件的当前位置,向后移动“偏移量”字节 (3)选项=2,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节 偏移量:正数表示向右偏移,负数表示向左偏移 ? 12345678910111213 f = open('/tmp/test.txt','r+')f.seek(0,2)f.readline() '' f.seek(0,0)f.readline() 'hello girl!n' f.readline() 'hello boy!n' f.readline() 'hello man!n' f.readline() '' f.flush() 将修改写入到文件中(无需关闭文件) ? 12 f.write('hello python!')f.flush() ? 1 [root@node1 python]# cat /tmp/test.txt ? 1234 hello girl!hello boy!hello man!hello python! f.tell() 获取指针位置 ? 123456789 f = open('/tmp/test.txt')f.readline() 'hello girl!n' f.tell() 12 f.readline() 'hello boy!n' f.tell() 23 四、内容查找和替换1、内容查找实例:统计文件中hello个数 思路:打开文件,遍历文件内容,通过正则表达式匹配关键字,统计匹配个数。 ? 1 [root@node1 ~]# cat /tmp/test.txt ? 1234 hello girl!hello boy!hello man!hello python! 脚本如下: 方法一: ? 12345678910 !/usr/bin/python import ref = open('/tmp/test.txt')source = f.read()f.close()r = r'hello's = len(re.findall(r,source))print s[root@node1 python]# python count.py4 方法二: ? 123456789101112 !/usr/bin/python import refp = file("/tmp/test.txt",'r')count = 0for s in fp.readlines():li = re.findall("hello",s)if len(li)>0:count = count + len(li)print "Search",count, "hello"fp.close()[root@node1 python]# python count1.pySearch 4 hello 2、替换实例:把test.txt 中的hello全部换为"hi",并把结果保存到myhello.txt中。 ? 1234567891011121314 !/usr/bin/python import ref1 = open('/tmp/test.txt')f2 = open('/tmp/myhello.txt','r+')for s in f1.readlines():f2.write(s.replace('hello','hi'))f1.close()f2.close()[root@node1 python]# touch /tmp/myhello.txt[root@node1 ~]# cat /tmp/myhello.txthi girl!hi boy!hi man!hi python! 实例:读取文件test.txt内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为result.txt。test.txt 的内容如下所示: ? 12345678910111213141516171819 some words Sometimes in life,You find a special friend;Someone who changes your life just by being part of it.Someone who makes you laugh until you can't stop;Someone who makes you believe that there really is good in the world.Someone who convinces you that there really is an unlocked door just waiting for you to open it.This is Forever Friendship.when you're down,and the world seems dark and empty,Your forever friend lifts you up in spirits and makes that dark and empty worldsuddenly seem bright and full.Your forever friend gets you through the hard times,the sad times,and the confused times.If you turn and walk away,Your forever friend follows,If you lose you way,Your forever friend guides you and cheers you on.Your forever friend holds your hand and tells you that everything is going to be okay. 脚本如下: ? 12345678910 f = open('cdays-4-test.txt')result = list()for line in f.readlines(): # 逐行读取数据line = line.strip() #去掉每行头尾空白if not len(line) or line.startswith('#'): # 判断是否是空行或注释行continue #是的话,跳过不处理result.append(line) #保存result.sort() #排序结果print resultopen('cdays-4-result.txt','w').write('%s' % 'n'.join(result))
xuning715 2019-12-02 01:10:18 0 浏览量 回答数 0

问题

如何将本地的JSON数据填充到JavaScript代码里面?

想把本地的JSON格式数据填充到JavaScript代码里面,请问要怎么弄?原本的场景是想用python分析一段分本,处理后再调用echarts生成图表.发现浏览器不支持读取本地文件.因为数据只在本地上,所以AJAX好像也无法实现(也是浏览...
小旋风柴进 2019-12-01 19:35:08 850 浏览量 回答数 1

问题

如何使用Python将文本文件读取到列表或数组中

我正在尝试将文本文件的行读入python中的列表或数组中。创建后,我只需要能够单独访问列表或数组中的任何项目。 文本文件的格式如下: 0,0,200,0,53,1,0,255,...,0. 凡...以上&#x...
保持可爱mmm 2020-02-07 00:43:35 1 浏览量 回答数 1

回答

两点可以试试: 1.看着coding后面的冒号像是中文的,格式写对 2.看看文件的编码格式是不是utf-8的######回复 @阿有哥 : 我不玩python,机子上没环境 你可以写个helloworld编译下,然后拷贝代码到可以编译的文件######coding后面的冒号已经改为英文了,文件编码也确定是UTF-8的 依然还是不行,不知道那里错了,或者你能把这边代码复制到你的机子上 转换下EXE 看有没有出现和我一样的错误吗?###### 通过.spec文件打包试一下######tx是我要转成exe的源文件######回复 @阿有哥 : tx是什么?是你引入的文件吗######也还是一样 提示报错。
爱吃鱼的程序员 2020-05-29 13:08:50 0 浏览量 回答数 0

回答

两点可以试试: 1.看着coding后面的冒号像是中文的,格式写对 2.看看文件的编码格式是不是utf-8的######回复 @阿有哥 : 我不玩python,机子上没环境 你可以写个helloworld编译下,然后拷贝代码到可以编译的文件######coding后面的冒号已经改为英文了,文件编码也确定是UTF-8的 依然还是不行,不知道那里错了,或者你能把这边代码复制到你的机子上 转换下EXE 看有没有出现和我一样的错误吗?###### 通过.spec文件打包试一下######tx是我要转成exe的源文件######回复 @阿有哥 : tx是什么?是你引入的文件吗######也还是一样 提示报错。
爱吃鱼的程序员 2020-05-29 16:45:10 0 浏览量 回答数 0

回答

两点可以试试: 1.看着coding后面的冒号像是中文的,格式写对 2.看看文件的编码格式是不是utf-8的######回复 @阿有哥 : 我不玩python,机子上没环境 你可以写个helloworld编译下,然后拷贝代码到可以编译的文件######coding后面的冒号已经改为英文了,文件编码也确定是UTF-8的 依然还是不行,不知道那里错了,或者你能把这边代码复制到你的机子上 转换下EXE 看有没有出现和我一样的错误吗?###### 通过.spec文件打包试一下######tx是我要转成exe的源文件######回复 @阿有哥 : tx是什么?是你引入的文件吗######也还是一样 提示报错。
爱吃鱼的程序员 2020-06-01 14:52:02 0 浏览量 回答数 0

回答

两点可以试试: 1.看着coding后面的冒号像是中文的,格式写对 2.看看文件的编码格式是不是utf-8的######回复 @阿有哥 : 我不玩python,机子上没环境 你可以写个helloworld编译下,然后拷贝代码到可以编译的文件######coding后面的冒号已经改为英文了,文件编码也确定是UTF-8的 依然还是不行,不知道那里错了,或者你能把这边代码复制到你的机子上 转换下EXE 看有没有出现和我一样的错误吗?###### 通过.spec文件打包试一下######tx是我要转成exe的源文件######回复 @阿有哥 : tx是什么?是你引入的文件吗######也还是一样 提示报错。
优选2 2020-06-05 14:29:19 0 浏览量 回答数 0

回答

python2.x直接中文字符串用u'你好',这样 刚刚测试了一下#-*-coding:cp936-*-原因导致错误的改变,是因为改了windows行尾在windows的python自带编辑器run,提示加#-*-coding:cp936-*-,加了之后变成‘xd0’错误的Non-ASCII了,不知道是不是还缺什么回复 @電泡泡:记得重新保存一下回复 @電泡泡:#-*-coding:utf-8-*-这个去掉python2.7.3#修改时间--〉#u'修改时间':问题还是存在代码贴出了 第一行#修改时间:一样报错,改成#time:这行就没有保持难道是不支持中文字符集吗把第14行删除重新敲一次,是不是复制的代码,弄来了不可见的non-ascii字符貌似简体也不行我用的是繁体,应该怎么办呢可以保留吗那个是注释,这个也有关系吗经典的python编码问题,很麻烦,不能一概而论。问题的发生和你的系统,文本格式有关。,就我猜的话,应该是你读入的html编码为utf8。但是你用的是windws平台,编码是gb2312。查一下相关资料为好,手上没有你的东西,很难针对性找到原因。在linux(deepin)下的,查资料也就教人加上这句,还是没有效果,难道一定要写英文的吗 引用来自“AproSane”的答案 经典的python编码问题,很麻烦,不能一概而论。问题的发生和你的系统,文本格式有关。,就我猜的话,应该是你读入的html编码为utf8。但是你用的是windws平台,编码是gb2312。查一下相关资料为好,手上没有你的东西,很难针对性找到原因。没有涉及到html这是用gedit编辑的纯代码,里面包含的汉字就会报错,看了一下文件的编码本身就是utf-8尝试另存为,问题还是一样 编辑中文最好用python自带的idle保存。其实根本不需要加编码声明。 中文和其他非ascii字符,前加u声明就ok了sudoapt-getinstdlladle安装好了谢谢linux下的python,没有找到idle
爱吃鱼的程序员 2020-06-22 21:57:04 0 浏览量 回答数 0

回答

OSC 第 128 期高手问答 -- Python3 开发实战 @壁_花 @idisikx @hell0cat @DarkAngel @北京老爷们儿      恭喜以上五位网友或获得《Python Web开发实战》图书一本  请私信 @博文视点   告知快递信息(格式:姓名+电话+地址+邮编号码)!  ######@dongwm :不知作者有没有涉及过大数据方向的?我看部分大数据相关的都要用到python这是为什么?Hadoop整个生态圈都是Java的,python的定位是什么?######@dongwm :其实我是一个狂热的Python爱好者,但是还是想问: 用Python来进行Web开发,与它的其他竞争者相比,有什么优势呢?比如,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽量少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优势吗?如果一些性能方面的优化可以通过编写C扩展模块,或者通过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等同样可以做到。一句话概括上面的问题就是:是什么原因吸引我们使用Python来进行Web开发呢?######@dongwm : 按照“没有银弹”一说,python应该也有自己的适用范围吧,是不是比较适用于机器学习,不适合于web开发呢?######Python被称为「胶水语言」,虽然没有「统治」哪个领域,但是基本上个个领域都把手伸了进去。 机器学习我不熟不敢妄谈是不是更合适。我只能说,Python很适合web开发######使用豆瓣很多年,很喜欢豆瓣的风格。之前一直是在网页端浏览,后来又到了手机app端。我总体感觉豆瓣的进步很快。我想问的问题是,python web一直作为豆瓣的开发首选,是因为什么?还有关于豆瓣的权限模块的设计时,python web发挥了什么优势。作为手机端app的开发,python web会起到什么作用吗?######回复 @机器猫123 : 会的。也许不会开源,但是酱厂里面确实有很多不错的实现######回复 @dongwm : 未来豆瓣会继续用python web衍生开发新的产品吗?######回复 @dongwm : 谢谢老师的回答。######豆瓣选择Python,其实是公司和语言的风格很相似的缘故吧。我们做事喜欢优雅,清晰,高效,这这好也是Python希望的。 豆瓣的基础设施基本都是使用Python完成,包含权限部分,但是Python web和权限模块设计感觉没啥直接的关系,就是抽出来的库和使用它的关系,我也没懂有什么优势或者劣势。 豆瓣app的API后端是使用PythonWeb完成的###### 引用来自“DarkAngel”的评论 @dongwm :其实我是一个狂热的Python爱好者,但是还是想问: 用Python来进行Web开发,与它的其他竞争者相比,有什么优势呢?比如,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽量少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优势吗?如果一些性能方面的优化可以通过编写C扩展模块,或者通过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等同样可以做到。一句话概括上面的问题就是:是什么原因吸引我们使用Python来进行Web开发呢? 引用来自“dongwm”的评论ROR我倒没有实际的用过,不敢妄言。Python最大的优势是他是一个「胶水」语言,在工作中的各个方向都能看到Python对应的库的身影,学会Python会让你的路比较宽,但是用ruby,可能在我印象里面就是Web开发比较有名。我现在还没有发现做Web开发有比Python效率高的方式。 其实很多人都担心Python的执行效率,然而其实绝大多数情况Python足够快,不快的话要先看看自己是不是用得不对或者不好。现在硬件资源很廉价,除非上升到BAT那种规模,否者基本还没有到达讨论语言瓶颈的问题。现在豆瓣绝大多数基础设施都是使用Python开发的。在Web开发中,我们很少通过写扩展的方式提高性能,其实编程语言一般都不是网站性能的瓶颈,还可以通过其他方式解决。 之前学ROR是因为老师要求用这个,我没有用Python进行Web开发的经验,稍微有一点了解的也只是Flask或者Falcon这种轻量级的,感觉能够快速开发小巧的应用,但是不知道有哪个特别出名的应用或者网站系统是由Python开发的(比如WordPress和Discuz用的PHP,Gitlab用的Ruby,OSC好像用的是Java吧)。Python确实是一种比较万能的语言,但有点万金油却不够专精的感觉。比如在科学计算方面很流行,但是论效率不如Julia,论支持库的丰富和使用广泛度不如Matlab(特别是学校里面,教授做研究或者教学一般都会用Matlab);在系统管理方面看,能用Python干的脚本化工作,用shell或者perl基本上都能干,而且需要写的代码行数说不定更少。如果说用Python进行Web开发效率高,是有特指某一个框架吗,还是泛指? 我在写程序时首先会想到用Python,是因为喜欢tial-and-error这种方式,能够在正式写代码前确认想法能不能实现,能够让我有兴趣和信心继续下去。但真要说起来,能够提供REPL特性的语言也不少。 Python的执行效率貌似永远是Python热门的讨论话题,比如GIL的存在必须要用特殊的方式来优化。像gevent和Tornado之类的存在也适用于高并发的网络连接(不过Python在这方面的性能不一定是最高的,没有看过相关的测试)。再说Python的实现,除了最出名的CPython和PyPy之外,甚至还有为嵌入式设备开发的MicroPython(这也在另一方面说明了Python的万能性)。Dropbox的技术栈中也使用了Python,并且有开发面向性能的Python实现pyston,此外还有Stackless Python(听名字感觉很厉害,虽然其实我并没有去了解这到底是什么),但它家也在用Golang和Rust开发高性能的东西。那么,豆瓣的基础设施实现中,用Python开发的应用效率如何?也有使用除了CPython之外的实现来进行优化吗?(我是不是扯得有点偏题了?) ######回复 @dongwm : 那么用Python来开发Web,是否属于那种会带来这种优势的选择呢?或者有没有哪家公司通过把技术栈切换到Python而带来了这种进步?######回复 @dongwm : 以现在的硬件发展水平,基本上任何数量级的访问都可以通过硬件的堆砌获得支持。不过经常会看到新闻,比如某某公司将它的某某技术构架从XX语言切换到了YY语言,然后获得了性能提升、提高了稳定性、减少了部署的服务器等优势,(我记忆中有看到Twitter的新闻,PHP 7的新闻,还有一些其他的)。######豆瓣每天服务着千万级别的用户(抱歉不能说具体数字)的请求,绝大多数应用和基础设施都是Python实现的。所以应用效率不用担心。虽然可以使用C/C++的扩展提高运行效率,但是我接触的场景里面很少。相当于写扩展的维护性和成本,大家更愿意从架构,算法等方面来解决。######嚯,你的问题好长。 进行Web开发效率高算是泛指,包含django和flask。效率高也体现在它们的第三方扩展和支持比较完善,基本能想到的都有对应的项目支持,这样少造了很多轮子。###### @dongwm :python的确很好,也很强大,我也一直在用,但我大都做的和web方面没有什么联系.而我对web方面挺感兴趣,但自学起来始终不得要领,进展有点慢,大神能否讲一讲web方面的学习经验,或者flask方面的心得.又或者推荐一些关于web好的学习资源.期待您的回答并致谢.###### @dongwm :了解Python基本知识,希望学习一门Python web框架学习后端开发。之前我对部分主流框架进行了一些了解:Django,Tornado,在知乎上有一个非常活跃的群体。在框架的选择问题上,只有最适合你自己、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,其实大部分人是没必要太关心框架的性能的,因为你开发的网站根本就是个小站,能上1万的IP的网站已经不多了,上10万的更是很少很少。在没有一定的访问量前谈性能其实是没有多大意义的,因为你的CPU和内存一直就闲着呢。而且语言和框架一般也不会是性能瓶颈,性能问题最常出现在数据库访问和文件读写上。 ######嗯 赞同你的观点。很多人在杞人忧天。先等活到有必要讨论语言的那一天,那时候早就有钱有人有时间,哪怕Python真的不满足,重构呗######@dongwm :Python确实越来越火了,知乎就是python做的,偶尔搞了一点,发现确实很高级,至少比java语言高级一些某些功能Java只需要写100行,而Python可能只要20行。做一些外维系统还是挺方便的,比如日志的提取等,之前学的是2.7版本,现在python3比之前的版本有哪些新特性呢? ######python 3是相当于站在Python2的肩膀上,摒弃了早年设计python 2的错误思想(所以有的地方向前不兼容),加了一些新的语法,比如asyncio,甚至type hint(我不喜欢)。 具体的内容可以看 https://docs.python.org/3/whatsnew/index.html。 总体上和Python 2区别不大。不用纠结Python 2/3###### @dongwm :初入门python,有c、java基础。再看《python基础教程(第二版)》。请问您有推荐的书籍吗?######我个人在知乎专栏写过一篇推荐书的文章 https://zhuanlan.zhihu.com/p/22198827。我建议有一些其他语言基础的同学好好地看看《Python学习手册》,如果你英语比较好,建议直接看原著。《Python基础教程》虽然是一个经典的入门教程,写作风格也相对轻松幽默,但是由于本书写作于2010年,书中有大量内容已经过时,所以不推荐! ========================== Python "RemoteError: Remote error: UnicodeEncodeError 'ascii' codec can't encode ch:报错 {   "traceback": "  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/st2actions/container/base.py\", line 99, in _do_run\n    LOG.debug('Performing run for runner: %s' % (runner.runner_id), extra=extra)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 49, in wrapped_f\n    def wrapped_f(*args, **kw):\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 206, in call\n    if not self.should_reject(attempt):\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 247, in get\n    else:\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 200, in call\n    try:\n  File \"/opt/stackstorm/runners/mistral_v2/mistral_v2.py\", line 219, in run\n    result = self.start(action_parameters=action_parameters)\n  File \"/opt/stackstorm/runners/mistral_v2/mistral_v2.py\", line 256, in start\n    **options)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/v2/executions.py\", line 56, in create\n    return self._create('/executions', data)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/base.py\", line 95, in _create\n    self._raise_api_exception(resp)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/base.py\", line 143, in _raise_api_exception\n    error_message=error_data)\n",         "error": "RemoteError: Remote error: UnicodeEncodeError 'ascii' codec can't encode character u'\\xae' in position 169: ordinal not in range(128)\n[u'Traceback (most recent call last):\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/server.py\", line 155, in _process_incoming\\n    failure = None\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 222, in dispatch\\n    if hasattr(endpoint, method):\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 192, in _do_dispatch\\n    new_args[argname] = self.serializer.deserialize_entity(ctxt, arg)\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/engine/engine_server.py\", line 98, in start_workflow\\n    (rpc_ctx, workflow_identifier, utils.cut(workflow_input),\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/utils/__init__.py\", line 284, in cut\\n    return cut_dict(data, length=length)\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/utils/__init__.py\", line 198, in cut_dict\\n    v = str(value)\\n', u\"UnicodeEncodeError: 'ascii' codec can't encode character u'\\\\xae' in position 169: ordinal not in range(128)\\n\"]." }
kun坤 2020-06-15 11:08:13 0 浏览量 回答数 0

回答

1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f 换页oyy 八进制数yy代表的字符,例如:o12代表换行xyy 十进制数yy代表的字符,例如:x0a代表换行other 其它的字符以普通格式输出 2.字符串格式化 3.操作符 一、算术运算符 注意: 双斜杠 // 除法总是向下取整。 从符点数到整数的转换可能会舍入也可能截断,建议使用math.floor()和math.ceil()明确定义的转换。 Python定义pow(0, 0)和0 ** 0等于1。 二、比较运算符 运算符 描述< 小于<= 小于或等于 大于= 大于或等于== 等于 != 不等于is 判断两个标识符是不是引用自一个对象is not 判断两个标识符是不是引用自不同对象注意: 八个比较运算符优先级相同。 Python允许x < y <= z这样的链式比较,它相当于x < y and y <= z。 复数不能进行大小比较,只能比较是否相等。 三、逻辑运算符 运算符 描述 备注x or y if x is false, then y, elsex x andy if x is false, then x, elsey not x if x is false, then True,elseFalse 注意: or是个短路运算符,它只有在第一个运算数为False时才会计算第二个运算数的值。 and也是个短路运算符,它只有在第一个运算数为True时才会计算第二个运算数的值。 not的优先级比其他类型的运算符低,所以not a == b相当于not (a == b),而 a == not b是错误的。 四、位运算符 运算符 描述 备注x | y 按位或运算符 x ^ y 按位异或运算符 x & y 按位与运算符 x << n 左移动运算符 x >> n 右移动运算符 ~x 按位取反运算符 五、赋值运算符 复合赋值运算符与算术运算符是一一对应的: 六、成员运算符 Python提供了成员运算符,测试一个元素是否在一个序列(Sequence)中。 运算符 描述in 如果在指定的序列中找到值返回True,否则返回False。not in 如果在指定的序列中没有找到值返回True,否则返回False。 4.关键字总结 Python中的关键字包括如下: and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try你想看看有哪些关键字?OK,打开一个终端,就像这样~ long@zhouyl:~$ pythonPython 2.7.3 (default, Jan 2 2013, 16:53:07) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information. import keywordkeyword.kwlist ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] ============================== 华丽的 正文分隔符 ======================================== 看到这些关键字你还能记得多少?你不妨自己一个一个对照想想它的用法,下面是我总结的,我根据前面的学习笔记将上述关键字分为以下几类: 1.判断、循环 对于Python的循环及判断主要包括这些关键字: if elif else for while break continue and or is not in 这几个关键字在前面介绍 if 语法、while语法、for语法以及and...or语法中已有介绍,下面再一笔带过: 1.1 if 语法 if语法与C语言、shell脚本之下的非常类似,最大的区别就是冒号以及严格的缩进,当然这两点也是Python区别于其他语言的地方: if condition1: do something elif condition2: do another thing else: also do something 1.2 while 语法 Python的while语法区别于C、shell下的while除了冒号及缩进之外,还有一点就是while可以携带一个可选的else语句: while condition: do something else: do something 注:else语句是可选的,但是使用while语句时一定要注意判断语句可以跳出! 1.3 for 语法 与while类似,Python的for循环也包括一个可选的else语句(跳出for循环时执行,但是如果是从break语句跳出则不执行else语句块中的代码!),而且for 加上 关键字in就组成了最常见的列表解析用法(以后会写个专门的博客)。 下面是for的一般用法: for i in range(1,10,2): do something if condition: break else: do something for的列表解析用法: for items in list: print items 1.4 and...or 语法 Python的and/or操作与其他语言不同的是它的返回值是参与判断的两个值之一,所以我们可以通过这个特性来实现Python下的 a ? b : c ! 有C语言基础的知道 “ a ? b : c ! ” 语法是判断 a,如果正确则执行b,否则执行 c! 而Python下我们可以这么用:“ a and b or c ”(此方法中必须保证b必须是True值),python自左向右执行此句,先判断a and b :如果a是True值,a and b语句仍需要执行b,而此时b是True值!所以a and b的值是b,而此时a and b or c就变成了b or c,因b是True值,所以b or c的结果也是b;如果a是False值,a and b语句的结果就是a,此时 a and b or c就转化为a or c,因为此时a是 False值,所以不管c是True 还是Flase,a or c的结果就是c!!!捋通逻辑的话,a and b or c 是不是就是Python下的a ? b : c ! 用法? 1.5 is ,not is 和 is not 是Python下判断同一性的关键字,通常用来判断 是 True 、False或者None(Python下的NULL)! 比如 if alue is True : ... (不记得本节的童鞋罚复习:python 学习笔记 2 -- 判断语句) 2.函数、模块、类 对于Python的函数及模块主要包括这些关键字: from import as def pass lambda return class 那么你还能记得它们么?下面简单介绍一下: 2.1 模块 Python的编程通常大量使用标准库中的模块,使用方法就是使用import 、from以及as 关键字。 比如: import sys # 导入sys模块 from sys import argv # 从sys模块中导入argv ,这个在前面介绍脚本传参数时使用到 import cPickle as p # 将cPickle模块导入并在此将它简单命名为p,此后直接可以使用p替代cPickle模块原名,这个在介绍文件输入输出时的存储器中使用到 2.2 函数 Python中定义函数时使用到def关键字,如果你当前不想写入真实的函数操作,可以使用pass关键字指代不做任何操作: def JustAFunction: pass 当然,在需要给函数返回值时就用到了return关键字,这里简单提一下Python下的函数返回值可以是多个(接收返回值时用相应数量的变量接收!)! 此外Python下有个神奇的Lambda函数,它允许你定义单行的最小函数,这是从Lisp中借用来的,可以用在任何需要函数的地方。比如: g = lambda x : x*2 # 定义一个Lambda函数用来计算参数的2倍并返回! print g(2) # 使用时使用lambda函数返回的变量作为这个函数的函数名,括号中带入相应参数即可! (不记得本节的童鞋罚复习:python 学习笔记 4 -- 函数篇) 3.异常 对于Python的异常主要包括这些关键字: try except finally raise 异常这一节还是比较简单的,将可能出现的异常放在 try: 后面的语句块中,使用except关键字捕获一定的异常并在接下来的语句块中做相应操作,而finally中接的是无论出现什么异常总在执行最后做finally: 后面的语句块(比如关闭文件等必要的操作!) raise关键字是在一定的情况下引发异常,通常结合自定义的异常类型使用。 (不记得本节的童鞋罚复习:python 学习笔记 6 -- 异常处理) 4.其他 上面的三类过后,还剩下这些关键字: print del global with assert yield exec 首先print 在前面的笔记或者任何地方你都能见到,所以还是比较熟悉的,此处就不多介绍了!del 关键字在前面的笔记中已有所涉及,比如删除列表中的某项,我们使用 “ del mylist[0] ” 可能这些剩下来的关键字你比较陌生,所以下面来介绍一下: 4.1.global 关键字 当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。 eg. ? 1 2 3 4 5 6 7 8 9 10 11 !/usr/bin/python Filename: func_local.py def func(x): print'x is', x x = 2 print'Changed local x to', x x = 50 func(x) print'x is still', x 运行的结果是这样的:? 1 2 3 4 $ python func_local.py x is 50 # 运行func函数时,先打印x的值,此时带的值是作为参数带入的外部定义的50,所以能正常打印 x=50 Changed local x to 2 # 在func函数中将x赋2,并打印 x is still 50 # 运行完func函数,打印x的值,此时x的值仍然是之前赋给的50,而不是func函数中修改过的2,因为在函数中修改的只是函数内的局部变量 那么为什么我们要在这提到局部变量呢?bingo,聪明的你一下就猜到这个global就是用来定义全局变量的。也就是说如果你想要为一个在函数外定义的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。eg.? 1 2 3 4 5 6 7 8 9 10 11 12 !/usr/bin/python Filename: func_global.py def func(): global x print'x is', x x = 2 print'Changed local x to', x x = 50 func() print'Value of x is', x 运行的结果是这样的:? 1 2 3 4 $ python func_global.py x is 50 Changed global x to 2 Value of x is 2 # global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。 你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 4.2.with 关键字 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。如果不用with语句,打开一个文件并读文件的代码如下:? 1 2 3 file = open("/tmp/foo.txt") data = file.read() file.close() 当然这样直接打开有两个问题:一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是添加上异常处理的版本:? 1 2 3 4 5 file = open("/tmp/foo.txt") try: data = file.read() finally: file.close() 虽然这段代码运行良好,但是太冗余了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:? 1 2 with open("/tmp/foo.txt") as file: data = file.read() 这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。with语句的执行逻辑如下:紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。 下面例子可以具体说明with如何工作:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 !/usr/bin/python with_example01.py classSample: def __enter__(self): print"In __enter__()" return"Foo" def __exit__(self, type, value, trace): print"In __exit__()" def get_sample(): returnSample() with get_sample() as sample: print"sample:", sample 运行代码,输出如下? 1 2 3 4 $python with_example01.py In __enter__() # __enter__()方法被执行 sample: Foo # __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample',执行代码块,打印变量"sample"的值为"Foo" In __exit__() # __exit__()方法被调用 4.3.assert 关键字 assert语句是一种插入调试断点到程序的一种便捷的方式。assert语句用来声明某个条件是真的,当assert语句失败的时候,会引发一AssertionError,所以结合try...except我们就可以处理这样的异常。 mylist # 此时mylist是有三个元素的列表['a', 'b', 'c']assert len(mylist) is not None # 用assert判断列表不为空,正确无返回assert len(mylist) is None # 用assert判断列表为空 Traceback (most recent call last): File "", line 1, in AssertionError # 引发AssertionError异常 4.4.yield 关键字 我们先看一个示例:? 1 2 3 4 5 6 7 8 def fab(max): n, a, b = 0,0,1 whilen < max: yield b # print b a, b = b, a + b n = n + 1 ''' 使用这个函数:? 1 2 3 4 5 6 7 8 forn in fab(5): ... print n ... 1 1 2 3 5 简单地讲,yield 的作用就是把一个函数变成一个 generator(生成器),带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable(可迭代的)对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f = fab(5) f.next() 1 f.next() 1 f.next() 2 f.next() 3 f.next() 5 f.next() Traceback (most recent call last): File"", line 1, in StopIteration 当函数执行结束时,generator 自动抛出 StopIteration 异常,表示迭代完成。在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。 我们可以得出以下结论:一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。 yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。 注:如果看完此段你还未明白yield,没问题,因为yield是初学者的一个难点,那么你下一步需要做的就是……看一看下面参考资料中给的关于yield的博文! 4.5.exec 关键字 官方文档对于exec的解释: "This statement supports dynamic execution of Python code."也就是说使用exec可以动态执行Python代码(也可以是文件)。? 1 2 3 4 5 6 7 8 9 10 11 12 13 longer = "print "Hello World ,my name is longer"" # 比如说我们定义了一个字符串 longer 'print "Hello World ,my name is longer"' exec(longer) # 使用exec 动态执行字符串中的代码 Hello World ,my name is longer exec(sayhi) # 使用exec直接打开文件名(指定sayhi,sayhi.py以及"sayhi.py"都会报一定的错,但是我觉得直接带sayhi报错非常典型) Traceback (most recent call last): File"", line 1, in TypeError: exec: arg 1must be a string, file, or code object # python IDE报错,提示exec的第一个参 数必须是一个字符串、文件或者一个代码对象 f = file("sayhi.py") # 使用file打开sayhi.py并创建f实例 exec(f) # 使用exec直接运行文件描述符f,运行正常!! Hi,thisis [''] script 上述给的例子比较简单,注意例子中exec语句的用法和eval_r(), execfile()是不一样的. exec是一个关键字(要不然我怎么会在这里介绍呢~~~), 而eval_r()和execfile()则是内建函数。更多关于exec的使用请详看引用资料或者Google之 在需要在字符中使用特殊字符时,python用反斜杠()转义字符。 原始字符串 有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如: print r’tr’ 实际输出为“tr”。 转义字符 描述 (在行尾时) 续行符 反斜杠符号 ’ 单引号 ” 双引号 a 响铃 b 退格(Backspace) e 转义 000 空 n 换行 v 纵向制表符 t 横向制表符 r 回车 f 换页 oyy 八进制数yy代表的字符,例如:o12代表换行 xyy 十进制数yy代表的字符,例如:x0a代表换行 other 其它的字符以普通格式输出
xuning715 2019-12-02 01:10:21 0 浏览量 回答数 0

回答

 mod_wsgi.so是linux文件,你找到也应该没有用,是其他地方配置错了吧!为什么要在windows下部署呢,在linux下用nginx+uwsgi很方便啊。因为手头上正好有一台阿里云的服务器,windowserver的系统啊。所以就没有用linnux部署啊。 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi找到了这个对应的版本了:mod_wsgi‑4.5.15+ap24vc14‑cp36‑cp36m‑win_amd64.whl,但是无论是用pip安装,还是改为.zip格式解压都没有看到mod.wsgi.so这个文件啊? 已解决:将mod_wsgi‑4.5.15+ap24vc14‑cp36‑cp36m‑win_amd64.whl更改为.so格式,拷贝到modules文件夹即可。要注意python版本,系统版本是否对应。
爱吃鱼的程序员 2020-06-08 16:05:35 0 浏览量 回答数 0

回答

<0x00> 前言 处理二进制文件或者从网络接收字节流时,字节流中的结构化数据可能存在二进制有符号数。虽然开发者根据字节流协议可以先验的知道有符号数的字节序、字长、符号位等信息,但在使用Python进行类型转换时缺少将这些信息显式传递给Python解释器的手段。本文介绍了两种在Python开发中处理二进制有符号数的方法。<0x01> Python如何处理数字类型 很多编程语言在处理有符号数时将数字的最高位作为符号位,但Python的数字类型实现有所不同。以下是CPython中对长整形的定义:(以下皆为Python 2.7版本)include/longobject.h[cpp] view plain copy/ Long (arbitrary precision) integer object interface / typedef struct _longobject PyLongObject; / Revealed in longintrepr.h / include/longintrepr.h[cpp] view plain copy/* Long integer representation. The absolute value of a number is equal to SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) Negative numbers are represented with ob_size < 0; zero is represented by ob_size == 0. In a normalized number, ob_digit[abs(ob_size)-1](the most significant digit) is never zero. Also, in all cases, for all valid i, 0 <= ob_digit[i] <= MASK. The allocation function takes care of allocating extra memory so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. CAUTION: Generic code manipulating subtypes of PyVarObject has to aware that longs abuse ob_size's sign bit. */ struct _longobject { PyObject_VAR_HEAD digit ob_digit[1]; }; include/object.h[cpp] view plain copy/* PyObject_VAR_HEAD defines the initial segment of all variable-size container objects. These end with a declaration of an array with 1 element, but enough space is malloc'ed so that the array actually has room for ob_size elements. Note that ob_size is an element count, not necessarily a byte count. */ define PyObject_VAR_HEAD \ PyObject_HEAD \ Py_ssize_t ob_size; /* Number of items in variable part */ 从以上代码以及注释中我们知道,Python中的长整形,即_longobject,其符号位是通过PyObject_VAR_HEAD中的ob_size来表示,而ob_digit只存储着长整形的绝对值。另一方面,当我们初始化一个长整形对象(即将一个数值赋值给对象)的时候,Python解释器并不会把这个数值的最高位当作符号位而是将其当作有效位。下面以数值-500为例,来看看使用该数值对Python对象赋值会发生什么,简便起见,这里使用16bit字长。我们知道,为了计算方便,负数在计算机中以其二进制补码形式存储,我们首先将-500转换为二进制补码:十进制 -500十六进制 -0x01 F4二进制 -0b 0000 0001 1111 0100二进制原码(符号在最高位) 0b 1000 0001 1111 0100二进制反码(除符号位外,对原码按位取反) 0b 1111 1110 0000 1011二进制补码(二进制反码加1) 0b 1111 1110 0000 1100二进制补码的十六进制表示 0xFE 0C下面代码模拟从字节流中接收到一个大字节序的二进制串(0xFE 0x0C)并把它赋值给一个Python变量然后打印该变量的值:[python] view plain copy stream = 'xFEx0C' number = (ord(stream[0]) << 8) + ord(stream[1]) '0x{:0X}'.format(number) '0xFE0C' print number 65036 这显然不是我们想要的结果,为了让Python在以有符号数对对象进行初始化时正确工作,上面的代码需要修改。<0x02> 使用负号传递数值的符号信息 现在我们知道Python并不从数字的符号位读取符号信息,为了让Python正确的处理该数值,开发者必须显示的通知Python解释器:这是一个负数。开发者可以借助负号(-),即negative操作符来完成这个任务。先看一下negtive操作符在CPython中的实现:Objects/longobject.c[cpp] view plain copystatic PyObject * long_neg(PyLongObject *v) { PyLongObject *z; if (v->ob_size == 0 && PyLong_CheckExact(v)) { /* -0 == 0 */ Py_INCREF(v); return (PyObject *) v; } z = (PyLongObject *)_PyLong_Copy(v); if (z != NULL) z->ob_size = -(v->ob_size); return (PyObject *)z; } 可见negtive操作符只对_longobject的ob_size域(即Python记载的符号位)进行了negtive操作,而ob_digit域不变。我们还知道,如果数值value为负数,则有value = - abs(value)。当我们将负数的绝对值和negtive操作符一起传递给Python解释器,Python解释器就能正确的处理该数值。对于本例中的二进制串0xFE 0x0C,我们已经先验的知道了该串的字节序,字长信息,所以其符号位在最高位即bit15。因符号位为1,则该数值为负数。下一步是对该数值求绝对值,由于数值是二进制补码形式存储,则其绝对值为二进制补码减去1(即其二进制反码)再按位取反。代码如下:[python] view plain copy number = 0xFE0C if (number & 0x8000) != 0: ... number = -((number - 1) ^ 0xFFFF) ... print number -500 细心的读者可能会注意到上面代码中按位取反操作并没有使用~(即invert操作符),而是使用的和0xFFFF异或来实现。如果改为invert操作符会如何呢?[python] view plain copy number = 0xFE0C if (number & 0x8000) != 0: ... number = -(~(number - 1)) ... print number 65036 还是让我们来看一下CPython对invert操作符的实现:Objects/longobject.c[cpp] view plain copystatic PyObject * long_invert(PyLongObject *v) { /* Implement ~x as -(x+1) */ PyLongObject *x; PyLongObject *w; w = (PyLongObject *)PyLong_FromLong(1L); if (w == NULL) return NULL; x = (PyLongObject *) long_add(v, w); Py_DECREF(w); if (x == NULL) return NULL; Py_SIZE(x) = -(Py_SIZE(x)); return (PyObject *)x; } 正如代码中的注释说明,Python的invert操作符的实现并不是真的按位取反,而是对数值加1后的negtive操作。 <0x03> 一个更通用的库 struct是一个对二进制结构化数据解包与打包的库,可以让你使用对开发者更友好的方式来传递字节序、字长、符号位等信息,同时也有着足够的错误报告机制,让你的开发更高效。[python] view plain copy import struct stream = 'xFEx0C' number, = struct.unpack('>h', stream) print number -500 '>h'是struct支持的格式化串,‘>'表明字节流为大字节序,‘h'表明字节流包含signed short。关于struct模块更多的说明可参见这个链接。
xuning715 2019-12-02 01:10:09 0 浏览量 回答数 0

问题

使用python请求上传文件

我在尝试将文件上传到API时遇到问题。在宽阔的用户界面中,我没有问题手动上传Excel文件。当我尝试使用请求上传上传文件时,我收到415错误(文件格式无效)。这是该发布请求的简单代码&...
几许相思几点泪 2019-12-24 20:49:36 4 浏览量 回答数 1

问题

关于上交所show2003.DBF文件使用python读取问题?报错

先上代码,实现一个从DBF文件中导入再转成pandas中的dataframe方式,读的时候出现了问题。 from simpledbf import Dbf5 import pandas as pd ...
爱吃鱼的程序员 2020-06-09 14:47:53 0 浏览量 回答数 1

回答

1、Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。 python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。 总之,大家以后对urllib2库敬而远之就行了。来拥抱Requests吧。 Requests的官方文档:cn.python-requests.org/zh_CN/latest/ 通过下面方法安装requests [python] view plain copy pip install requests 2、Requests如何发送HTTP请求 非常简单,先导入requests, [python] view plain copy import requests 然后,按照下面的方法发送http的各种请求: [python] view plain copy r = requests.get('githubcom/timeline.json') r = requests.post("httpbin.org/post") r = requests.put("httpbin.org/put") r = requests.delete("httpbin.org/delete") r = requests.head("httpbin.org/get") r = requests.options("httpbin.org/get") 3、为URL传递参数 如果http请求需要带URL参数(注意是URL参数不是body参数),那么需要将参数附带到payload字典里头,按照下面的方法发送请求: [python] view plain copy import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("httpbin.org/get",params=payload) print r.url 通过print(r.url)能看到URL已被正确编码: [python] view plain copy httpbin.org/get?key2=value2&key1=value1 注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。 4、unicode响应内容 [python] view plain copy import requests r = requests.get('githubcom/timeline.json') r.text 响应结果是: {"message":"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would Go away: Git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"developer.githubcom/v3/activity/events/#list-public-events"} Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码。你可以找出Requests使用了什么编码,并且能够使用r.encoding 属性来改变它 >>> r.encoding 'utf-8' 5、二进制响应内容 如果请求返回的是二进制的图片,你可以使用r.content访问请求响应体。 [python] view plain copy import requests from PIL import Image from StringIO import StringIO r = requests.get('cn.python-requests.org/zh_CN/latest/_static/requests-sidebar.png') i = Image.open(StringIO(r.content)) i.show() 6、JSON响应内容 Requests中也有一个内置的JSON解码器,助你处理JSON数据: [python] view plain copy import requests r = requests.get('githubcom/timeline.json') print r.json() r.json将返回的json格式字符串解码成python字典。r.text返回的utf-8的文本。 7、定制请求头 如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给headers 参数就可以了。 [python] view plain copy import requests import json payload = {'some': 'data'} headers = {'content-type': 'application/json'} r = requests.get('githubcom/timeline.json', data=json.dumps(payload), headers=headers) print r.json() 注意,这里的payload是放到body里面的,所以params参数要使用json数据。 8、POST请求 就像上面‘定制请求头’中的例子,将payload序列化为json格式数据,传递给data参数。 9、POST提交文件 先制作一个text文件,名为‘report.txt’,内容是‘this is a file’。Requests使得上传多部分编码文件变得很简单: [python] view plain copy import requests url = 'httpbin.org/post' files = {'file': open('report.txt', 'rb')} r = requests.post(url, files=files) print r.text 返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py { "args": {}, "data": "", "files": { "file": "this is a file" }, "form": {}, "headers": { "Accept": "/", "Accept-Encoding": "gzip, deflate", "Content-Length": "160", "Content-Type": "multipart/form-data; boundary=a3b41a6300214ffdb55ddbc23dfc0d91", "Host": "httpbin.org", "User-Agent": "python-requests/2.7.0 CPython/2.7.9 Windows/2012Server" }, "json": null, "origin": "202.108.92.226", "url": "httpbin.org/post" } Process finished with exit code 0 10、POST提交表单 传递一个字典给 data 参数就可以了。数据字典在发出请求时会自动编码为表单形式: [python] view plain copy >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.post("httpbin.org/post", data=payload) 查看响应内容: >>> print r.text { "args": {}, "data": "", "files": {}, "form": { "key1": "value1", "key2": "value2" }, "headers": { "Accept": "/", "Accept-Encoding": "gzip, deflate", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.6.0 CPython/2.7.10 Windows/7" }, "json": null, "origin": "124.251.251.2", "url": "httpbin.org/post" } 11、响应状态码 使用r.status_code返回响应的状态码。 [python] view plain copy import requests r = requests.get('httpbin.org/get') print r.status_code 为方便引用,Requests还附带了一个内置的状态码查询对象: [python] view plain copy print r.status_code == requests.codes.ok 12、失败请求抛出异常 如果发送了一个失败请求(非200响应),我们可以通过 Response.raise_for_status()来抛出异常: [python] view plain copy import requests bad_r = requests.get('httpbin.org/status/404') print bad_r.status_code bad_r.raise_for_status() 返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py 404 Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py", line 5, in bad_r.raise_for_status() File "C:\Python27\lib\site-packages\requests\models.py", line 851, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 404 Client Error: NOT FOUND Process finished with exit code 1 如果返回码是200,则不会抛出异常,即: [python] view plain copy import requests bad_r = requests.get('httpbin.org/get') print bad_r.status_code bad_r.raise_for_status() 的返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py 200 Process finished with exit code 0 13、响应头 我们可以查看以一个Python字典形式展示的服务器响应头: 读取全部头部: [python] view plain copy r.headers 返回: { 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'connection': 'close', 'server': 'nginx/1.0.4', 'x-runtime': '148ms', 'etag': '"e1ca502697e5c9317743dc078f67693f"', 'content-type': 'application/json' } 读取某一个头部字段: [python] view plain copy r.headers['Content-Type'] r.headers.get('content-type') 14、Cookies 得到响应中包含的一些Cookie: [python] view plain copy >>> url = 'examplecom/some/cookie/setting/url' >>> r = requests.get(url) >>> r.cookies['example_cookie_name'] 'example_cookie_value' 要想发送你的cookies到服务器,可以使用 cookies 参数: [python] view plain copy >>> url = 'httpbin.org/cookies' >>> cookies = dict(cookies_are='working') >>> r = requests.get(url, cookies=cookies) >>> r.text 返回结果: u'{\n "cookies": {\n "cookies_are": "working"\n }\n}\n' 15、重定向与请求历史 默认情况下,除了 HEAD, Requests会自动处理所有重定向。 可以使用响应对象的 history 方法来追踪重定向。 [python] view plain copy >>> r = requests.get('githubcom') >>> r.url 'githubcom/' >>> r.status_code 200 >>> r.history [] 如果你使用的是GET, OPTIONS, POST, PUT, PATCH 或者 DELETE,,那么你可以通过 allow_redirects 参数禁用重定向处理: [python] view plain copy >>> r = requests.get('githubcom', allow_redirects=False) >>> r.status_code 301 >>> r.history [] 如果你使用的是HEAD,你也可以启用重定向: [python] view plain copy >>> r = requests.head('githubcom', allow_redirects=True) >>> r.url 'githubcom/' >>> r.history [] 答案来源网络,供参考,希望对您有帮助
问问小秘 2019-12-02 03:03:05 0 浏览量 回答数 0

回答

1、Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。 python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。 总之,大家以后对urllib2库敬而远之就行了。来拥抱Requests吧。 Requests的官方文档:cn.python-requests.org/zh_CN/latest/ 通过下面方法安装requests [python] view plain copy pip install requests 2、Requests如何发送HTTP请求 非常简单,先导入requests, [python] view plain copy import requests 然后,按照下面的方法发送http的各种请求: [python] view plain copy r = requests.get('githubcom/timeline.json') r = requests.post("httpbin.org/post") r = requests.put("httpbin.org/put") r = requests.delete("httpbin.org/delete") r = requests.head("httpbin.org/get") r = requests.options("httpbin.org/get") 3、为URL传递参数 如果http请求需要带URL参数(注意是URL参数不是body参数),那么需要将参数附带到payload字典里头,按照下面的方法发送请求: [python] view plain copy import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("httpbin.org/get",params=payload) print r.url 通过print(r.url)能看到URL已被正确编码: [python] view plain copy httpbin.org/get?key2=value2&key1=value1 注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。 4、unicode响应内容 [python] view plain copy import requests r = requests.get('githubcom/timeline.json') r.text 响应结果是: {"message":"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would Go away: Git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"developer.githubcom/v3/activity/events/#list-public-events"} Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码。你可以找出Requests使用了什么编码,并且能够使用r.encoding 属性来改变它 >>> r.encoding 'utf-8' 5、二进制响应内容 如果请求返回的是二进制的图片,你可以使用r.content访问请求响应体。 [python] view plain copy import requests from PIL import Image from StringIO import StringIO r = requests.get('cn.python-requests.org/zh_CN/latest/_static/requests-sidebar.png') i = Image.open(StringIO(r.content)) i.show() 6、JSON响应内容 Requests中也有一个内置的JSON解码器,助你处理JSON数据: [python] view plain copy import requests r = requests.get('githubcom/timeline.json') print r.json() r.json将返回的json格式字符串解码成python字典。r.text返回的utf-8的文本。 7、定制请求头 如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给headers 参数就可以了。 [python] view plain copy import requests import json payload = {'some': 'data'} headers = {'content-type': 'application/json'} r = requests.get('githubcom/timeline.json', data=json.dumps(payload), headers=headers) print r.json() 注意,这里的payload是放到body里面的,所以params参数要使用json数据。 8、POST请求 就像上面‘定制请求头’中的例子,将payload序列化为json格式数据,传递给data参数。 9、POST提交文件 先制作一个text文件,名为‘report.txt’,内容是‘this is a file’。Requests使得上传多部分编码文件变得很简单: [python] view plain copy import requests url = 'httpbin.org/post' files = {'file': open('report.txt', 'rb')} r = requests.post(url, files=files) print r.text 返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py { "args": {}, "data": "", "files": { <strong>"file": "this is a file"</strong> }, "form": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "160", "Content-Type": "multipart/form-data; boundary=a3b41a6300214ffdb55ddbc23dfc0d91", "Host": "httpbin.org", "User-Agent": "python-requests/2.7.0 CPython/2.7.9 Windows/2012Server" }, "json": null, "origin": "202.108.92.226", "url": "httpbin.org/post" } Process finished with exit code 0 10、POST提交表单 传递一个字典给 data 参数就可以了。数据字典在发出请求时会自动编码为表单形式: [python] view plain copy >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.post("httpbin.org/post", data=payload) 查看响应内容: >>> print r.text { "args": {}, "data": "", "files": {}, "form": { "key1": "value1", "key2": "value2" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.6.0 CPython/2.7.10 Windows/7" }, "json": null, "origin": "124.251.251.2", "url": "httpbin.org/post" } 11、响应状态码 使用r.status_code返回响应的状态码。 [python] view plain copy import requests r = requests.get('httpbin.org/get') print r.status_code 为方便引用,Requests还附带了一个内置的状态码查询对象: [python] view plain copy print r.status_code == requests.codes.ok 12、失败请求抛出异常 如果发送了一个失败请求(非200响应),我们可以通过 Response.raise_for_status()来抛出异常: [python] view plain copy import requests bad_r = requests.get('httpbin.org/status/404') print bad_r.status_code bad_r.raise_for_status() 返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py 404 Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py", line 5, in <module> bad_r.raise_for_status() File "C:\Python27\lib\site-packages\requests\models.py", line 851, in raise_for_status raise HTTPError(http_error_msg, response=self) <strong>requests.exceptions.HTTPError: 404 Client Error: NOT FOUND</strong> Process finished with exit code 1 如果返回码是200,则不会抛出异常,即: [python] view plain copy import requests bad_r = requests.get('httpbin.org/get') print bad_r.status_code bad_r.raise_for_status() 的返回结果是: [python] view plain copy C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py 200 Process finished with exit code 0 13、响应头 我们可以查看以一个Python字典形式展示的服务器响应头: 读取全部头部: [python] view plain copy r.headers 返回: { 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'connection': 'close', 'server': 'nginx/1.0.4', 'x-runtime': '148ms', 'etag': '"e1ca502697e5c9317743dc078f67693f"', 'content-type': 'application/json' } 读取某一个头部字段: [python] view plain copy r.headers['Content-Type'] r.headers.get('content-type') 14、Cookies 得到响应中包含的一些Cookie: [python] view plain copy >>> url = 'examplecom/some/cookie/setting/url' >>> r = requests.get(url) >>> r.cookies['example_cookie_name'] 'example_cookie_value' 要想发送你的cookies到服务器,可以使用 cookies 参数: [python] view plain copy >>> url = 'httpbin.org/cookies' >>> cookies = dict(cookies_are='working') >>> r = requests.get(url, cookies=cookies) >>> r.text 返回结果: u'{\n "cookies": {\n "cookies_are": "working"\n }\n}\n' 15、重定向与请求历史 默认情况下,除了 HEAD, Requests会自动处理所有重定向。 可以使用响应对象的 history 方法来追踪重定向。 [python] view plain copy >>> r = requests.get('githubcom') >>> r.url 'githubcom/' >>> r.status_code 200 >>> r.history [<Response [301]>] 如果你使用的是GET, OPTIONS, POST, PUT, PATCH 或者 DELETE,,那么你可以通过 allow_redirects 参数禁用重定向处理: [python] view plain copy >>> r = requests.get('githubcom', allow_redirects=False) >>> r.status_code 301 >>> r.history [] 如果你使用的是HEAD,你也可以启用重定向: [python] view plain copy >>> r = requests.head('githubcom', allow_redirects=True) >>> r.url 'githubcom/' >>> r.history [<Response [301]>] 答案来源网络,供参考,希望对您有帮助
问问小秘 2019-12-02 03:03:05 0 浏览量 回答数 0

问题

【精品问答】Python二级考试题库

1.关于数据的存储结构,以下选项描述正确的是( D ) A: 数据所占的存储空间量 B: 存储在外存中的数据 C: 数据在计算机中的顺序存储方式 D: 数据的逻辑结构在计算机中的表示 2.关于线性...
珍宝珠 2019-12-01 22:03:38 7177 浏览量 回答数 3

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT