-
本文借鉴 https://blog.csdn.net/u012133034/article/details/100704082 实现说明:使用 hdfs 模块连接 webhdfs 接口实现1 环境系统:CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64python编译器:Python 3.7.8 FusionInsight HD 版本:6.5.1 或者 8.0.2,其中dfs.http.policy配置为 HTTP_AND_HTTPS说明:(1)linux环境安装python3可参考 https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=936822 步骤2.1 安装python依赖(1)因我的测试环境未连互联网,所有的依赖包是通过外网下载后上传到节点安装的,最终安装的python的依赖包如下:安装过程中使用的包:说明:(1)安装 cryptography 使用的是 cryptography-3.4.6-cp36-abi3-manylinux2010_x86_64.whl ,不要使用其tar.gz包来安装,否则需要依赖的东西太多,安装更麻烦(2)安装gssapi的时候,不能执行FI客户端的source,建议重新开个ssh终端来安装2.2 创建测试脚本脚本内容如下,其中IP为主Namenode节点IP,端口固定25002,注意修改对应的认证用户名import osfrom hdfs.ext.kerberos import KerberosClientfrom krbcontext import krbcontextclass HDFSTest: def __init__(self, host, port): self.keytab_file = os.path.split(os.path.realpath(__file__))[0] + '/user.keytab' print(self.keytab_file) self.user = 'developuser' self._connect(host, port) def _connect(self, host, port, sso_ticket=None): try: hdfs_url = 'http://' + host + ':' + port active_str = 'kinit -kt {0} {1}'.format(self.keytab_file, self.user) # 激活当前kerberos用户认证,因为python缓存机制,切换用户,这个缓存不会自动切换,需要手动处理下 os.system(active_str) with krbcontext(using_keytab=True, keytab_file=self.keytab_file, principal=self.user): self.client = KerberosClient(hdfs_url) except Exception as e: raise e def test(self): print(self.client.list("/")) print(self.client._list_status("/tmp").json()["FileStatuses"]["FileStatus"])if __name__ == '__main__': host = '8.5.136.6' port = '25002' a = HDFSTest(host, port) a.test()2.3 执行测试脚本(1)将脚本中指定用户的认证票据文件user.keytab文件放到和该脚本同一级目录内(2)执行source 客户端bigdata_env(3)执行测试脚本 python3 huaweiHDFSTest.py
-
不知不觉中,Python编程创造用第一阶段·Python入门篇所有课程内容都已经全部更新完毕。大家积极的学习态度,遇到问题及时在学习群内提出,让本阶段课程可以顺利完成再次感谢大家:◎积极完成每章的随堂测验打卡,做到了课后的知识强化与巩固;◎认真完成每周读书笔记打卡,将自己的学习心得总结下来;◎有活力地问答官打卡,分享自己在学习中的问题和经验。十分感谢大家能顺利完成本阶段的学习内容,我们也在大家学习的过程中,总结了大家反馈的内容,对新阶段的课程会更好的输出和整合预告:Python编程创造营第二阶段将于3月29日开启,大家千万不要错过哦~现在,大家迎来了第一阶段考核,让我们来看一下考核的具体内容▶考核打卡时间:2021.03.25-2021.03.28 23:59 ▶考核途径:点击下方链接,选择【第一阶段考核】https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXX121+Self-paced/about▶考核要求:进入考核页面后,点击“【必读】考核要求”,详细阅读考核要求和评判标准后按要求进行考核,提交机会只有1次,请大家认真作答。▶打卡方式:如果您已经在云学院平台提交考核结果,后请您按照下列方式进行考核打卡只有在按照要求进行打卡才会得到本阶段考核证书!只有在按照要求进行打卡才会得到本阶段考核证书!只有在按照要求进行打卡才会得到本阶段考核证书!方式:打卡正确的回复格式:华为云账号+姓名(显示在考核证书上面名字)+提交完考核页面截图1张例如:华为云账号:grandmaster 姓名:华为云小助手01 考核截图如下重要提示:请严格按照回复示例进行回复,本次为阶段末考核项目,如果没有按照要求的格式进行回复,版主将不予提示,同时不计入考核结果,会影响考核证书及奖品的发放哦▶考核评分:本次考核满分100分,提交后直接显示成绩,成绩排行榜会在考核结束后10个工作日内公布,只有即参与考核又参与考核打卡的同学才会有分数和对应的奖励哦~分数会公布在博客里面,具体请大家留意小助手信息。▶考核奖励:◎参与最后考核并按要求回复本帖,就可得到电子版证书(证书上会根据大家的回复的真实姓名填写信息,请大家在留信息时注意)参与考核,人人有份,证书由05小助手微信点对点发放,没添加小助手企业微信的伙伴可以扫描下方二维码添加,证书将在第一阶段结束后15个工作日内发放,请大家耐心等待小助手的通知哦~(注意:凭各阶段电子证书最后可兑换实体证书哦~)◎参与考核即可获得20积分累计到总积分中,赢取最后积分大奖;◎考核分数≥60分并回复本帖,可得到考核积分额外的3积分!◎特别提示:参加了移动应用开发所有阶段考核的同学们,最后可凭每阶段证书兑换整阶段实体证书一份,请大家关注后续规则! ◎大家别忘了随堂测验,读书笔记和问答官排位赛回复打卡截止日期为03月28日23:59,抓紧时间打卡呀~积分排行榜奖品本次活动不仅免费跟大牛学习技术,更有积分大礼等着大家~每次有效提交的学习任务都会得到对应积分,累计积分最高者即可获得HUAWEI GT 手表,还有华为无线耳机、旅行套装、数十万码豆等着大家! 活动注意事项1.由于本帖回复内容为阶段考核测试内容,并涉及到个人隐私,已设置回帖仅版主可见,请大家放心回复2.请大家务必在考核规定时间03月28日 23:59内完成考核回帖打卡,否侧将影响证书和奖品的发放3.积分和考核奖品信息我们会在考核阶段结束后15个工作日内整理完毕,发放奖品4.华为云账号为实名认证,每个实名认证账号/或同一收货地址收货人只能获得一份奖品,请大家注意5.阶段结束后如遇预定奖品库存不足时,华为云会更换同等价位奖品给大家!
-
3、数字匹配1、 匹配一段文本中的每行的邮箱http://blog.csdn.net/make164492212/article/details/516566382、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12';分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$3、 匹配qq号。(QQ号从10000开始) [1,9][0,9]{4,}4、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d*5、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$6、 匹配出所有整数4、爬虫123456789101112131415161718192021222324252627282930313233343536373839404142import requests import reimport json def getPage(url): response=requests.get(url) return response.text def parsePage(s): com=re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>' '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>',re.S) ret=com.finditer(s) for i in ret: yield { "id":i.group("id"), "title":i.group("title"), "rating_num":i.group("rating_num"), "comment_num":i.group("comment_num"), } def main(num): url='https://movie.douban.com/top250?start=%s&filter='%num response_html=getPage(url) ret=parsePage(response_html) print(ret) f=open("move_info7","a",encoding="utf8") for obj in ret: print(obj) data=json.dumps(obj,ensure_ascii=False) f.write(data+"\n") if __name__ == '__main__': count=0 for i in range(10): main(count) count+=25简化版123456789101112131415161718192021222324252627282930313233343536373839import reimport jsonfrom urllib.request import urlopen def getPage(url): response = urlopen(url) return response.read().decode('utf-8') def parsePage(s): com = re.compile( '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>' '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S) ret = com.finditer(s) for i in ret: yield { "id": i.group("id"), "title": i.group("title"), "rating_num": i.group("rating_num"), "comment_num": i.group("comment_num"), } def main(num): url = 'https://movie.douban.com/top250?start=%s&filter=' % num response_html = getPage(url) ret = parsePage(response_html) print(ret) f = open("move_info7", "a", encoding="utf8") for obj in ret: print(obj) data = str(obj) f.write(data + "\n") count = 0for i in range(10): main(count) count += 25flags有很多可选值:re.I(IGNORECASE)忽略大小写,括号内是完整的写法re.M(MULTILINE)多行模式,改变^和$的行为re.S(DOTALL)点可以匹配任意字符,包括换行符re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flagre.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释实现能计算类似1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式的计算器程序
-
2.4 字符集[][^]正则待匹配字符匹配结果说明小[明李子巧玲珑]*小明和小李子和小巧玲珑小明小李子小巧玲珑表示匹配"小"字后面[明李子巧玲珑]的字符任意次小[^和]*小明和小李子和小巧玲珑小明小李子小巧玲珑表示匹配一个不是"和"的字符任意次[\d]456bdha34563表示匹配任意一个数字,匹配到4个结果[\d]+456bdha34563表示匹配任意个数字,匹配到2个结果2.5 分组 ()与 或 |[^]身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示:正则待匹配字符匹配结果说明^[1-9]\d{13,16}[0-9x]$110101198001017032110101198001017032表示可以匹配一个正确的身份证号^[1-9]\d{13,16}[0-9x]$11010119800101701101011980010170表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字^[1-9]\d{14}(\d{2}[0-9x])?$1101011980010170False现在不会匹配错误的身份证号了()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次^([1-9]\d{16}[0-9x]|[1-9]\d{14})$110105199812067023110105199812067023表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}2.6 转义符 \在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成'\\'。在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\d",字符串中要写成'\\d',那么正则里就要写成"\\\\d",这样就太麻烦了。这个时候我们就用到了r'\d'这个概念,此时的正则是r'\\d'就可以了。正则待匹配字符匹配结果说明\d\dFalse因为在正则表达式中\是有特殊意义的字符,所以要匹配\d本身,用表达式\d无法匹配\\d\dTrue转义\之后变成\\,即可匹配"\\\\d"'\\d'True如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次r'\\d'r'\d'True在字符串之前加r,让整个字符串不转义2.7 贪婪匹配贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配正则待匹配字符匹配结果说明<.*><script>...<script><script>...<script>默认为贪婪匹配模式,会匹配尽量长的字符串<.*?>r'\d'<script><script>加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串几个常用的非贪婪匹配*? 重复任意次,但尽可能少重复+? 重复1次或更多次,但尽可能少重复?? 重复0次或1次,但尽可能少重复{n,m}? 重复n到m次,但尽可能少重复{n,}? 重复n次以上,但尽可能少重复.*?的用法. 是任意字符* 是取 0 至 无限长度? 是非贪婪模式,何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:.*?x 就是取前面任意长度的字符,直到一个x出现三、re模块123456789101112131415161718192021222324252627282930313233import re ret = re.findall('a', 'ea eg an') # 返回所有满足匹配条件的结果,放在列表里print(ret) #结果 : ['a', 'a'] ret = re.search('a', 'va eg an').group()print(ret) #结果 : 'a'# 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 ret = re.match('a', 'abc').group() # 同search,不过尽在字符串开始处进行匹配print(ret)#结果 : 'a' ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割print(ret) # ['', '', 'cd'] ret = re.sub('\d', 'H', 'va3eg4an4', 1)#将数字替换成'H',参数1表示只替换1个print(ret) #vaHeg4an4 ret = re.subn('\d', 'H', 'va3eg4an4')#将数字替换成'H',返回元组(替换的结果,替换了多少次)print(ret) obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串print(ret.group()) #结果 : 123 import reret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器print(ret) # <callable_iterator object at 0x10195f940>print(next(ret).group()) #查看第一个结果print(next(ret).group()) #查看第二个结果print([i.group() for i in ret]) #查看剩余的左右结果注意:1 findall的优先级查询:1234567import re ret = re.findall('www.(baidu|xunlei).com', 'www.xunlei.com')print(ret) # ['xunlei'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ret = re.findall('www.(?:baidu|xunlei).com', 'www.xunlei.com')print(ret) # ['www.xunlei.com']2 split的优先级查询123456789ret=re.split("\d+","va3eg4an")print(ret) #结果 : ['va', 'eg', 'an'] ret=re.split("(\d+)","va3eg4an")print(ret) #结果 : ['va', '3', 'eg', '4', 'an'] #在匹配部分加上()之后所切出的结果是不同的,#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,#这个在某些需要保留匹配部分的使用过程是非常重要的。3.1 匹配标签12345678910111213import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")#还可以在分组中利用?<name>的形式给分组起名字#获取的匹配结果可以直接用group('名字')拿到对应的值print(ret.group('tag_name')) #结果 :h1print(ret.group()) #结果 :<h1>hello</h1> ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>")#如果不给组起名字,也可以用\序号来找到对应的组,表示要找的内容和前面的组内容一致#获取的匹配结果可以直接用group(序号)拿到对应的值print(ret.group(1))print(ret.group()) #结果 :<h1>hello</h1>2、匹配整数12345678import re ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))")print(ret) #['1', '2', '60', '40', '35', '5', '4', '3']ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")print(ret) #['1', '-2', '60', '', '5', '-4', '3']ret.remove("")print(ret) #['1', '-2', '60', '5', '-4', '3']
-
先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/这是京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示。假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误。这个功能是怎么实现的呢?假如现在你用python写一段代码,类似:phone_number = input('please input your phone number : ')你怎么判断这个phone_number是合法的呢?根据手机号码一共11位并且是只以13、14、15、18开头的数字这些特点,我们用python写了如下代码:12345678910111213# 方式一 判断号码是否合法# -*- coding:utf-8 -*-while True: phone_number = str(input('please input your phone number : ')) if len(phone_number) == 11 \ and phone_number.isdigit() \ and (phone_number.startswith('13') \ or phone_number.startswith('14') \ or phone_number.startswith('15') \ or phone_number.startswith('18')): print('是合法的手机号码') else: print('不是合法的手机号码')12345678# 方式二 判断号码是否合法# -*- coding:utf-8 -*-import rephone_number = str(input('please input your phone number : '))if re.match('^(13|14|15|18)[0-9]{9}$',phone_number): print('是合法的手机号码')else: print('不是合法的手机号码')正则表达式不仅在python领域,在整个编程届都占有举足轻重的地位。不管以后你是不是去做python开发,只要你是一个程序员就应该了解正则表达式的基本使用。如果未来你要在爬虫领域发展,你就更应该好好学习这方面的知识。但是你要知道,re模块本质上和正则表达式没有关系。re模块和正则表达式的关系 类似于time模块和时间的关系。时间有自己的格式,年月日时分秒,12个月,365天......已经成为了一种规则。正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则。官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。二、正则表达式在线测试工具 http://tool.chinaz.com/regex/首先谈到正则,就只和字符串相关了。在我给你提供的工具中,你输入的每一个字都是一个字符串。其次,如果在一个位置的一个值,不会出现什么变化,那么是不需要规则的。比如你要用"1"去匹配"1",或者用"2"去匹配"2",直接就可以匹配上。这连python的字符串操作都可以轻松做到。那么在之后我们更多要考虑的是在同一个位置上可以出现的字符的范围。2.1 字符组字符组 : [字符组]在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字、字母、标点等等。假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。正则待匹配字符匹配结果说明[0123456789]8True在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配[0123456789]aFalse由于字符组中没有"a"字符,所以不能匹配[0-9]7True也可以用-表示范围,[0-9]就和[0123456789]是一个意思[a-z]sTrue同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示[A-Z]BTrue[A-Z]就表示所有的大写字母[0-9a-fA-F]eTrue可以匹配数字,大小写形式的a~f,用来验证十六进制字符2.2 元字符元字符匹配内容.匹配除换行符以外的任意字符\w匹配字母或数字或下划线\s匹配任意的空白符\d匹配数字\n匹配一个换行符\t匹配一个制表符\b匹配一个单词的结尾^匹配字符串的开始$匹配字符串的结尾\W匹配非字母或数字或下划线\D匹配非数字\S匹配非空白符a|b匹配字符a或字符b()匹配括号内的表达式,也表示一个组[...]匹配字符组中的字符[^...]匹配除了字符组中字符的所有字符2.3 量词量词用法说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次2.3.1 . ^ $正则待匹配字符匹配结果说明小.小明小军小兰小明小军小兰匹配所有"小."的字符^小.小明小军小兰小明只从开头匹配"小."小.$小明小军小兰小兰只匹配结尾的"小.$"2.3.2 * + ? { }正则待匹配字符匹配结果说明小.?小明和小李子和小巧玲珑小明小李小巧?表示重复零次或一次,即只匹配"小"后面一个任意字符小.*小明和小李子和小巧玲珑小明和小李子和小巧玲珑*表示重复零次或多次,即匹配"小"后面0个或多个任意字符小.+小明和小李子和小巧玲珑小明和小李子和小巧玲珑+表示重复一次或多次,即只匹配"小"后面1个或多个任意字符小.{1,2}小明和小李子和小巧玲珑小明和小李子小巧玲{1,2}匹配1到2次任意字符注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配正则待匹配字符匹配结果说明小.*?小明和小李子和小巧玲珑小小小惰性匹配
-
1、什么是水仙花数?水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)详见:水仙花数-百度百科2、实现:123456789101112131415161718192021222324def number_daffodils(m=100, n=1000): if type(m) is int and type(n) is int and 100 <= m < n <= 1000: daffodils = [] for num in range(m, n): a = [int(s) for s in str(num)] """ 计算个、十、百位数 x = int(num/100) # 百位数 y = int(num/10) % 10 # 十位数 z = num % 10 # 个位数 将整数按位拆分 a = list(str(num)) a = list(map(eval, str(num))) """ if num == a[0] ** 3 + a[1] ** 3 + a[2] ** 3: daffodils.append(num) if len(daffodils) == 0: print("No number of daffodils") else: print(" ".join(str(i) for i in daffodils)) elif type(m) is not int or type(n) is not int: raise Exception('参数类型错误') else: raise Exception('参数超出范围')1number_daffodils()3、懒人法:列表推导式12a = [i * 100 + j * 10 + k for i in range(1, 10) for j in range(0, 10) for k in range(0, 10) if i * 100 + j * 10 + k == i ** 3 + j ** 3 + k ** 3]print(a)
-
【摘要】 psycopg2接口实现GaussDB(DWS)流式数据入库。GaussDB(DWS)尚未宣称支持psycopg2开源Python接口,但实际上研发内部测试框架一直在使用Python接口,并没有功能问题,经过系统性测试和多平台验证即可对外支持。GaussDB(DWS)数据入库方式主要有三种:INSERT/COPY/FDW,三者性能INSERT最差,FDW(gds外表/obs外表)性能最好,但在很多客户场景下都是流式数据,不额外落盘,需要直接入库,这种场景下可以采用copy方式入库,Python接口同样支持copy_from接口,示例程序如下,实际应用中可以通过StringIO来进行数据的缓存,本次举例只是给出copy_from的使用指导:#!/usr/bin/env python # -*- coding: UTF-8 -*-import sysimport psycopg2import os def copy_from_file(conn, table): """ Here we are going to load the csv file and use copy_from() to copy it to the table """ tmp_df = "./tpcds_1x/store_sales.dat" f = open(tmp_df, 'r') cursor = conn.cursor() try: cursor.copy_from(f, table, sep=",") conn.commit() except (Exception, psycopg2.DatabaseError) as error: print("Error: %s" % error) conn.rollback() cursor.close() return 1 print("copy_from_file() done") cursor.close() #-----------------------------------------------# Main code #-----------------------------------------------conn = psycopg2.connect(host='x.x.x.x', port='8000', database='postgres', user='jack', password='Gauss_234')conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)copy_from_file(conn, 'store_sales')conn.close() # close the connection原文链接:https://bbs.huaweicloud.com/blogs/215107【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中) HOT 【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中)扫码关注我哦,我在这里↓↓↓
-
需求:从控制台输入一个五位数,如果是回文数就打印“是回文数”,否则打印“不是回文数”,例如:11111 12321 12221“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。回文数百度百科分析:输入为纯数字,长度为5个位与万位上的数字相同,十位与千位上的数字相同方法一:算术运算思想:通过整除,求模的算数运算得到各位上的数字,再通过比较前后对比(个位与万位,十位与千位做对比),得出结论.12345678910111213a = input('请输入一个五位数:')# 判断长度是否是5位,是否有纯数字组成if len(a) == 5 and a.isdigit(): # 将str转为int a = int(a) # (万位与各位) and (千位与十位) if (a//10000 == a%10) and (a%10000//1000 == a%100 // 10): print(f'{a}是回文数') else: print(f'{a}不是回文数')else: print('输入有误') 方法二:索引取值思想:通过输入的字符串进行索引取值,前后进行对比,得出结论.123456789101112a = input('请输入一个五位数:')# 判断长度是否是5位,是否有纯数字组成if len(a) == 5 and a.isdigit(): # 对a[0]和a[4],a[1]和a[3],进行对比 if (a[0] == a[4]) and (a[1] == a[3]): print('%f是回文数' % (a)) else: print('%f不是回文数' % (a))else: print('输入有误') 方法三:切片逆序思想:input()函数输入的数据的类型是str,str是有序的,所以可以对str切片操作,并取逆序的结果,将逆序的结果与原来的str做比较,得出结论.12345678910a = input('请输入一个五位数:')# 判断长度是否是5位,是否有纯数字组成if len(a) == 5 and a.isdigit(): # 逆序切片的结果与a做比较 if a[::-1] == a: print(f'{a}是回文数') else: print(f'{a}不是回文数')else: print('输入有误')总结:熟悉各基本数据结构的特点,可以帮助我们更好地解决问题.
-
摘要:作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,本文专门介绍 python 异常处理。异常广义上的错误分为错误和异常错误指的是可以人为避免异常是指在语法逻辑正确的而前提下,出现的问题在python中,异常是一个类,可以处理和使用异常的分类BaseException 所有异常的基类Exception 常见错误的基类ArithmeticError 所有数值计算错误的基类Warning 警告的基类 AssertError 断言语句(assert)失败AttributeError 尝试访问未知的对象属性DeprecattionWarning 关于被弃用的特征的警告EOFError 用户输入文件末尾标志EOF(Ctrl+d)FloattingPointError 浮点计算错误FutureWarning 关于构造将来语义会有改变的警告GeneratorExit generator.close()方法被调用的时候ImportError 导入模块失败的时候IndexError 索引超出序列的范围KeyError 字典中查找一个不存在的关键字KeyboardInterrupt 用户输入中断键(Ctrl+c)MemoryError 内存溢出(可通过删除对象释放内存)NamerError 尝试访问一个不存在的变量NotImplementedError 尚未实现的方法OSError 操作系统产生的异常(例如打开一个不存在的文件)OverflowError 数值运算超出最大限制OverflowWarning 旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning 关于特征会被遗弃的警告ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象RuntimeError 一般的运行时错误RuntimeWarning 可疑的运行行为(runtime behavior)的警告StopIteration 迭代器没有更多的值SyntaxError Python的语法错误SyntaxWarning 可疑的语法的警告IndentationError 缩进错误TabError Tab和空格混合使用SystemError Python编译器系统错误SystemExit Python编译器进程被关闭TypeError 不同类型间的无效操作UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)UnicodeError Unicode相关的错误(ValueError的子类)UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)UserWarning 用户代码生成的警告ValueError 传入无效的参数ZeroDivisionError 除数为零l = [1,2,3,4,5]# 除零错误num = int(input("Please input your num: "))print(100/num)Please input your num: 0--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-1-8abb196ce2aa> in <module> 2 # 除零错误 3 num = int(input("Please input your num: "))----> 4 print(100/num)ZeroDivisionError: division by zero异常处理不能保证程序永远正确运行但是,必须保证程序在最坏的情况下得到的问题被妥善管理python的异常处理模块全部语法为: try: 尝试实现某个操作, 如果没有出现异常,任务就可以完成 如果出现异常,将异常从当前代码块扔出去尝试解决异常 except 异常类型1: 解决方案1:用于尝试在此处处理异常解决问题 except 异常类型2: 解决方案2:用于尝试在此处处理异常解决问题 except (异常类型1,异常类型2...): 解决方案:针对多个异常使用相同的处理方式 except: 如果没有出现任何异常,将会执行此处代码 finally: 有没有异常都要执行的代码流程执行try下面的语句如果出现异常,则在except语句里查找对应异常病进行处理如果没有出现异常,则执行else语句内容最后,不管是否出现异常,都要执行finally语句除except(最少一个)以外,else和finally可选# 简单异常案例try: num = int(input("Please input your number:")) rst = 100/num print("计算结果是:{}".format(rst))except: print("输入错误") # exit是退出程序的意思 exit()Please input your number:0输入错误# 简单异常案例# 给出提示信息try: num = int(input("Please input your number:")) rst = 100/num print("计算结果是:{}".format(rst))# 捕获异常后,把异常实例化,出错信息会在实例里# 注意以下写法# 以下语句是捕获ZeroDivisionError异常并实例化实例eexcept ZeroDivisionError as e: print("输入错误") print(e) # exit是退出程序的意思 exit()# 简单异常案例# 给出提示信息try: num = int(input("Please input your number:")) rst = 100/num print("计算结果是:{}".format(rst))# 如果是多种error的情况# 需要把越具体的错误,越往前放# 在异常类继承关系中,越是子类的异常,越要往前放,# 越是父类的异常,越要往后放 、 # 在处理异常的时候,一旦拦截到某一个异常,则不再继续往下查看,直接进行下一个# 代码,即有finally则执行finally语句,否贼就执行下一个大的语句except ZeroDivisionError as e: print("输入错误") print(e) # exit是退出程序的意思 exit()except NameError as e: print("名字起错了") print(e) except AttributeError as e: print("属性错误") print(e) exit()# 常见错误的基类# 如果写下面这句话,常见异常都会拦截住# 而且下面这句话一定是最后一个excepttionexcept Exception as e: print("我也不知道就出错了") print(e) except ValueError as e: print("NO>>>>>>>>>>>")print("hahaha")Please input your number:ffff我也不知道就出错了invalid literal for int() with base 10: 'ffff'hahaha用户手动引发异常当某些情况,用户希望自己引发一个异常的时候,可以使用raise 关键字来引发异常
-
请教一下脚本粘贴进去能不能执行?
-
本文实例为大家分享了python实现自动打卡小程序的具体代码,供大家参考,具体内容如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197"""湖南大学疫情防控每日自动打卡程序v1.0author: Liutime:2021/3/16""" from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom PIL import Imagefrom bs4 import BeautifulSoupimport requestsfrom aip import AipOcrimport timefrom datetime import datetimeimport re class DailyAttend(object): def __init__(self, browser, stu_id, passwd, t, address, tmp_yesterday, tmp_today): self.browser = browser self.stu_id = stu_id self.passwd = passwd self.t = t self.address = address self.tmp_yesterday = tmp_yesterday self.tmp_today = tmp_today self.img_path = "captcha.png" def get_captcha_img(self): url = "https://fangkong.hnu.edu.cn/app/#/login?redirect=%2Fhome" self.browser.get(url) self.browser.find_element_by_class_name("vcdoe-tips").click() # 模拟点击使验证码加载出来 time.sleep(2) webpage = self.browser.page_source soup = BeautifulSoup(webpage, features="html.parser") div = soup.find("div", attrs={"class": "login-content"}) src = div.find_all("img")[2].attrs["src"] # 从html中解析出图片链接 r = requests.get(src) if r.status_code == 200: open(self.img_path, "wb").write(r.content) else: print("网络不佳,无法加载验证码图片") def recog_captcha_img(self): img = Image.open(self.img_path) img = img.convert('L') # P模式转换为L模式(灰度模式默认阈值127) count = 165 # 设定阈值 table = [] for i in range(256): if i < count: table.append(0) else: table.append(1) img = img.point(table, '1') img.save(self.img_path) # 保存处理后的验证码 ## 调用百度ocr # 识别码 APP_ID = "23779944" API_KEY = "FPgsSXsuqXk3twpqVHmNNK6g" SECRET_KEY = "nG08oGzErk8CdMvDAynAiGdzfBjHr3NO" # 初始化对象 client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 读取图片 def get_file_content(file_path): with open(file_path, 'rb') as f: return f.read() image = get_file_content(self.img_path) # 定义参数变量 options = {'language_type': 'ENG', } # 识别语言类型,默认为'CHN_ENG'中英文混合 # 调用通用文字识别 result = client.basicGeneral(image, options) # 高精度接口 basicAccurate for word in result['words_result']: self.captcha = (word['words']) def login(self): ## 登录 time.sleep(10)
-
【python开发】MDC单板上没有安装python,是否可以联网装上python解释器,直接在目录下运行python程序?如果不能进行上述操作的话,该如何在mdc单板上运行python程序
-
我们知道数字有很多种类型,比如整数、浮点数。在字符串值的讨论上,我们会需要用浮点值的形式,那么就需要函数来进行转换。float函数的功能正是如此,能够对其中的数值进行转换,下面我们就float函数的一系列内容带来详细的介绍。1、说明给定一个字符串值(包含浮点值),我们必须在Python中将其转换为浮点值。要将字符串值转换为float,我们可以使用float()功能。2、语法1class float([x])3、参数x -- 整数或字符串4、返回值返回浮点数。5、实例1234print(float(1))print(float(15))print(float(-15.3))print(float('568')) #字符串
-
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 。请根据这个假设,如果反转后整数溢出那么就返回 0。解题思路:1.实现数据的反转如果是正数:12345tra = 0while x != 0: n2 = x%10 x = x //10 tra = tra*10 + n2如果是负数就abs()一下这个数2.溢出判定给出范围[−2^31, 2^31 − 1]则输出的结果tra就必须满足这个范围.代码:12345678910111213141516171819202122232425class Solution(object): def reverse(self, x): base = 1 for i in range(31): base = base * 2 two_Max = base - 1 two_Min = -base tra = 0 if x < 0: x = abs(x) while x != 0: n2 = x % 10 if tra > abs(two_Min) // 10 or (tra == abs(two_Min) // 10 and n2 < -8): return 0 x = x // 10 tra = tra * 10 + n2 return -tra else: while x != 0: n2 = x % 10 if tra > two_Max//10 or (tra == two_Max and n2 > 7 ): return 0 x = x // 10 tra = tra * 10 + n2 return tra补充:python实现数字反转_python 数字怎么反转每次写 Python 都会忘记该怎么写,最后只能去 Stack Overflow 查?我也一样。时间一长,这让人厌倦。这15个 Python 技巧和窍门,可以帮你提高效率1. 交换值1234x, y = 1, 2print(x, y) x, y = y, x print(x, y)2. 字符串列表合并为一个字符串123sentence_list = ["my", "name", "is", "George"] sentence_string = " ".join(sentence_list) print(sentence_string)3. 将字符串拆分为子字符串列表123sentence_string = "my name is George"sentence_string.split() print(sentence_string)4. 通过数字填充初始化列表1234[0]*1000# List of 1000 zeros [8.2]*1000# List of 1000 8.2's5. 字典合并123x = {'a': 1, 'b': 2} y = {'b': 3, 'c': 4} z = {**x, **y}6. 反转字符串1name = "George" name[::-1]7. 从函数返回多个值12345def get_a_string(): a = "George"b = "is"c = "cool" return a, b, c sentence = get_a_string() (a, b, c) = sentence8. 列表解析式12a = [1, 2, 3] b = [num*2 for num in a] # Create a new list by multiplying each element in a by 29. 遍历字典1m = {'a': 1, 'b': 2, 'c': 3, 'd': 4} for key, value in m.items(): print('{0}: {1}'.format(key, value))10. 同时遍历列表的索引和值1m = ['a', 'b', 'c', 'd'] for index, value in enumerate(m): print('{0}: {1}'.format(index, value))11. 初始化空容器1234a_list = list() a_dict = dict() a_map = map() a_set = set()12. 删除字符串两端的无用字符1name = " George " name_2 = "George///" name.strip() # prints "George" name_2.strip("/") # prints "George"13. 列表中出现最多的元素1test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4] print(max(set(test), key = test.count))14. 检查对象的内存使用情况1import sys x = 1 print(sys.getsizeof(x))15. 将 dict 转换为 XML1from xml.etree.ElementTree import Element def dict_to_xml(tag, d): ''' Turn a simple d
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签