博文

目前显示的是 2017的博文

Python - 正则表达式

一、使用正则和不使用正则区别 在不使用正则的情况下来匹配一个电话号码: #在一段文本中查找电话号码 例 331-896-7854 def isPhoneNumber(number): if len(number) != 12: #首先检查电话号码是否是12位数 return False for i in range(0,3): if not number[i].isdecimal(): #判断前三位是不是数字 return False if number[3] != '-': #判断第四位是不是 - return False for i in range(4,7): if not number[i].isdecimal(): return False if number[7] != '-': return False for i in range(8,12): if not number[i].isdecimal(): return False return True text = 'you can contact me at 331-896-7854. 400-400-8888 is my office' #待查找的文字 for i in range(len(text)): check = text[i:i+12] #因为电话号码是12位,所以将每段12个字符传入 判断 if isPhoneNumber(check): print('the phone number found:' + check) print('Done') 执行后 the phone number found:331-896-7854 the phone number found:400-400-8888 Done 使用正则来匹配 phoneNumRegex = re.compile(r'\d\d\d-\d\d\d...

Python - logging 模块

图片
用于便捷记录日志且线程安全的模块 1、单文件日志 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10) #这里建议写成 level=logging.info 或者其他的 logging.debug('debug') logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critical') logging.log(10,'log') #可以自定义level 值 CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 注:只有【当前写等级】大于【日志等级】时,日志文件才被记录。 日志记录格式: 2、多文件日志 对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。 # 定义文件 file_1_1 = logging.FileHandler('l1_1.log', 'a', encoding='utf-8') fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s") file_1_1.setFo...

Python - shutil 模块

shuti 是一个高级的 文件、文件夹、压缩包 内置处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) shutil.copyfile(src, dst) 拷贝文件 shutil.copyfile('f1.log', 'f2.log') shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变 shutil.copymode('f1.log', 'f2.log') shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags shutil.copystat('f1.log', 'f2.log') shutil.copy(src, dst) 拷贝文件和权限 import shutil shutil.copy('f1.log', 'f2.log') shutil.copy2(src, dst) 拷贝文件和状态信息 import shutil shutil.copy2('f1.log', 'f2.log') shutil.ignore_patterns(*patterns) shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹 import shutil shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) import shutil shutil.copytree('f1',...

Python - configparser 模块

configparser用于处理特定格式的文件,其本质上是利用open来操作文件。 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [section2] # 节点 k1 = v1 # 值 1.获取所有节点 import configparser config = configparser.ConfigParser() config.read('file',encoding='utf-8') ret = config.sections() print(ret) 2.获取指定节点下所有的键值对 import configparser config = configparser.ConfigParser() config.read('file',encoding='utf-8') ret = config.items('section1') 3.获取指定节点下的所有键 import configparser config = configparser.ConfigParser() config.read('file',encoding='utf-8') ret = config.options('section1') print(ret) 4.获取指定节点下指定的key的值 import configparser config = configparser.ConfigParser() config.read('file', encoding='utf-8') v = config.get('section1', 'k1') # v = config.getint('section1', 'k1') # v = config.getfloat('section1', 'k1') # v = config.getboolean('section1', 'k1') print(v) ...

三星xpress M2070W 如何连接 WiFi

一、实现WiFi打印功能,步骤: 先把打印机和电脑通过USB数据线连接好,并且无线路由器和电脑也处于接通状态,然后同时按住机器上的【WPS】按键与路由器上的【WPS】或【QSS】按键10秒钟左右,当机器无线网络状态灯蓝灯闪烁即可松手,此时打印机与电脑会自动连接成功。连接成功后打印机会自动打印网络配置页(可以预先放张纸),上面会有打印机的IP地址、子网掩码及网关(如机器没自动打印配置页,可按住【WPS】键15秒钟手动打印)。 连接成功后,安装随机光盘里的打印机驱动。 安装完成后,打印测试页即可。 二、实现NFC打印功能,步骤: 在打印机菜单中开启“WiFi开关和WiFi Direct”,开启此两项功能即可,打印机不用连接到网络。 在手机上开启NFC功能,型号不同操作有所不同,一般操作点击【设置】---【更多设置】---【NFC】---【开】。 打印机左下角有一张NFC功能的标贴,将已经开启NFC功能的手机放在标贴上。 放在NFC标志上后,手机会自动到下载Moblie Print软件界面。 若不下载Moblie Print软件也可以实现此功能,但是打印速度较慢,安装完成后再次将手机放到NFC标志上。 这时已经连接完成了,打开一张想打印的照片,点击print即可。(打印机与手机会自动以WIFI-Direct的方式连接)

Skype 常用命令

设定群组管理者(对话主持人)(拥有管理者权限的人员于群组对话输入以下指令) /setrole [Skype帐号] MASTER 显示目前聊天室所有用户及权限 /showmembers 显示目前帐号登入的装置 /showplaces 登出其它装置 /remotelogout 离开聊天室 /leave 向群组里添加成员 /add [Skype帐号] 移除群组成员 /kick [Skype帐号] 移除群组成员,此人无法加入此群 /kickban [Skype帐号] 呼叫群组(可以不受人数限制) /golive 在聊天室中搜索关键字 /find 更改聊天室的名字 /topic name 确认自己是不是创建者 /get creator 允许您指定需要什么出现在一个聊天的你要通知。例如, /alertson 伦敦 将只是警告您"伦敦"一词出现在聊天时。 /alertson [文本] 禁用消息通知 /alertsoff 查看管理员 /get admins 查询你在群中的角色 /get role 查询群组链接 /get url 在skype窗口中间显示你名字和发送的内容 /me [text] 设置允许加入聊天的成员。例如,/set allowlist + alex_cooper1将允许该成员加入聊天。 /set allowlist [[+|-]mask] 设置禁止加入聊天的成员。例如,/set banlist + alex_cooper1将禁止该成员加入聊天 /set banlist -alex_cooper1将允许他们重新加入。 /set banlist [[+|-]mask]

Python - 模块

模块,用一些代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 如:os 是系统相关的模块; 模块分为三种: 自定义模块 第三方模块 内置模块 一、time模块 >>> import time >>> time.sleep(1) #睡,后面指定秒数。 >>> time.time() #返回当前时间的时间戳,每个设备的时间戳都是从1970年1月1日开始算起 1503076001.620359 >>> time.ctime() #返回当前日期时间,字符串格式 'Fri Aug 18 19:12:28 2017' >>> time.gmtime() #得到struct_time格式的年月日,时分秒的数值,这个是格林威治时间 time.struct_time(tm_year=2017, tm_mon=8, tm_mday=18, tm_hour=17, tm_min=13, tm_sec=36, tm_wday=4, tm_yday=230, tm_isdst=0) >>> time.localtime() #当地时间 time.struct_time(tm_year=2017, tm_mon=8, tm_mday=18, tm_hour=19, tm_min=15, tm_sec=45, tm_wday=4, tm_yday=230, tm_isdst=1) >>> time.mktime(time.localtime()) #把struct_time格式的时间,转换为时间戳 1503076638.0 >>> time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) #把struct_time格式的时间转换为字符串格式 '2017-0...

Python - 函数复习 & 冒泡排序 & 递归 & 装饰器

一、函数作为参数 #### 例1 def f1(): print('F1被执行') def f2(arg): arg() #f1 = arg 当f1被作为参数传进来的时候,arg() 就相当于f1()也就是调用了f1函数 return 'F2被执行' ret = f2(f1) #f1不加括号时,代指函数, print(ret) #### 例2 def Myfilter(founc,li): result = [] for i in li: ret = founc(i) #由于执行函数的时候传的是f1,这里执行f1函数,返回的值赋给ret if ret: result.append(i) return result def f1(x): return True if x > 22 else False #当执行到founc(i)的时候,调用函数f1,并判断x(也就是i)的值 r = Myfilter(f1,[11,22,33,44]) #执行函数Myfilter并返回值赋值给r print(r) 二、冒泡排序 利用一个中间值,讲两个数值交换 li = [11,22,33,44,55] temp = li[1] #temp = 22 li[1] = li[2] #li[1] =33 li[2] = temp #li[2] = temp = 22 print(li) #[11,33,22,44,55] li = [33,2,10,1] for j in range(1,len(li)): for i in range(len(li)-j): #逐渐减少次数 if li[i] > li[i + 1]: #每循环一次判断两个值的大小,交换位置 temp = li[i] li[i] = li[i + 1] li[i + 1] = temp print(li) #[1...

Python - lambda & 内置函数 & 文件操作

图片
一、lambda表达式 lambda表达式只能用来写简单的函数, 就像用三元运算写简单if else语句一样 #无参数 def f1(): return 123 f1() f2 = lambda : 123 f2() #有参数 def f3(a1,a2): return a1+a2 f3(3,4) f4 = lambda a1,a2 : a1+a2 f4(3,4) 二、内置函数 👉👉 详细方法 abs(x) #返回一个数的绝对值,参数可以是整数也可以是浮点数 >>> abs(-2) 2 >>> abs(-3.4) 3.4 all(iterable) #如果传入的可迭代对象中的每个元素都为真则返回True,如果是空返回Flase (0,None,“”,{},[],()这些都是假) >>> all([1,'alex']) True >>> all([1,'alex','']) False any(iterable) #如果传入的可迭代对象中的任意一个元素为真则返回True,如果是空返回Flase (0,None,“”,{},[],()这些都是假) >>> any([1,'alex','']) True ascii(object) #调用对象对应的类里面的__repr__方法 >>> ascii(list()) '[]' bin(x) #二进制 oct(x) #八进制 int(x) #十进制 hex(x) #十六进制 #十进制 >> 二进制 >>> bin(10) '0b1010' >>> bin(-10) '-0b1010' #十进制 >> 八进制 >>> oct(10) '0o12' #十进制 >> 十六进制 >>> hex(10) '0xa' #二进制 >> 十进制 >>>...

Python - 函数练习

1.写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数 def zifu(zfc): #先定义他们的个数都为0 num_num = 0 letter_num = 0 space_num = 0 other_num = 0 #判断类型,累计加1 for i in zfc: if i.isalpha(): letter_num += 1 elif i.isdigit(): num_num += 1 elif i.isspace(): space_num += 1 else: other_num += 1 return (num_num,letter_num,space_num,other_num) ret = zifu(input('input your str:')) print(ret) 2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。 temp = [11,33,455,'das','4321','df'] # temp = 123 def panduan(s): #用isinstance方法判断传入的数值是不是 字符串、列表、元组类型,是的话计算他的长度 if isinstance(temp,str) or isinstance(temp,list) or isinstance(temp,tuple): return True if len(s) > 5 else False return None ret = panduan(temp) #获取函数执行后的返回值 if ret == True: print('您传入的对象长度大于5') elif ret == None: print('您传入的对象不是字符串、列表或元组') else: print('您传入的对象长度不足5') 3...

Python - set & 函数

图片
一、基本数据类型补充 ─ set(是一个无序且不重复的元素集合) #创建集合,两种方式 >>> s = set([11,22,33]) #set 中最多传一个参数 >>> type(s) # 这里的#加上是为了显示,可以忽略 >>> new_s = {11,22,33} #用{},看起来像是字典,但是字典是有键值对,而set没有 >>> type(new_s) #转换 >>> li = [11,22,33] >>> set(li) #讲列表转换为集合 {33, 11, 22} >>> li = [11,11,11] >>> set(li) #集合是不允许重复的,所以当列表li转为集合的时候,想的元素在集合中只显示一次 {11} add(self,*args,**kwargs) #添加元素 >>> s = set() #创建一个空集合 >>> s.add(11) #add只能添加一个元素,也不能添加列表,添加多个可以使用update >>> s {11} update(self,*args,**kwargs) #添加元素,可以添加多个 >>> s = set() >>> s.update([11,22,33]) >>> s {33, 11, 22} clear(self,*args,**kwargs) #清除内容 >>> s.clear() >>> s set() difference(self,*args,**kwargs) #A中存在,B中不存在的,并将其赋于一个新值 >>> A = {11,22,33,44} >>> B = {11,33,55,77} >>> ret = A.difference(B) >>> A #A的数值不变 {...

Python - 数据类型

图片
一、运算符 1.算数运算符 2.比较运算符 3.赋值运算符 4.逻辑运算符 5.成员运算符 二、基本数据类型 整数 int 字符串 str 布尔值 True False 列表 list 元组 tuple 字典 dict 所有数据类型具备的方法,存在在想对应的类里面。 id()查对象、变量内存地址,dir() 查看对应方法, help() 查看对应方法详细使用说明 1.int方法 >>> n1 =4 >>> n1.bit_length() # 查看n1用二进制表示,最少可以占几位 3 # >>> 00000100 2.str方法 (方法中带有self意思不需要传任何参数,可以直接调用;有count,需要设置数值;start、end设置起始数值……) capitalize(self) #把开头字母变大写 >>> str1 = 'alex' >>> str1.capitalize() 'Alex' center(self,width,fillchar=None) #内容居中,width设置这个字符串的总长度,剩余部分会用你所填写的fillchar补充 >>> str1 = 'alex' >>> str1.center(20,'*') '********alex********' >>> str1.center(20) #默认会用空格填充 ' alex ' count(self,sub,start=None,end=None) #计算子序列个数 >>> str2 = 'alexdurand' >>> str2.count('a') #在这个字符串中计算有多少个a 2 >>> str2 = 'alexdurand' >>> str2.count(...

JavaScript变量

图片
一、JS引入方式,内嵌与外联 二、变量与常量 变量: 变量在所有程序中都是最重要的也是最基本的。 变量也就是变化的量。 //S=πr^2 ,S 和 r是可变的,为变量 常量: 常量就是不变的量。 //就像数学当中π≈3.14,他是不可改变的 三、变量命名法 驼峰命名法: firstName // 第一个单词字母全部小写,后面的单词首字母大写 帕斯卡命名法: FirstName // 每个单词首字母都大写 匈牙利命名法: 属性+类型+对象描述 G_Str_name // G >> global , Str >> 字符串类型 , name >> 变量名 四、变量命名规则(在JS中所有的变量或者对象的声明均用var关键字来声明:var firstNmae;) 不能以数字开头 不能含特殊字符(下划线除外) 不能以关键字命名 大小写字母均可 五、声明变量&赋值 //声明一个变量 var a; alert(a); //声明变量,并赋值 var a = 'alex'; alert(a); //声明多个变量,并赋相同的初始值 var a=b=c=d='alex'; alert(a); 注:变量名称严格区分大小写: //这两个是完全不一样的变量 var username=‘alex’; var USERNAME=‘durand’; alert(username); alert(USERNAME);

Python - 入门

图片
一、交互模式 如果电脑安装过Python,在Terminal里输入python回车即可 二、第一句python代码 print('Hello,World!) python内部执行过程: 三、解释器 如果通过终端执行创建好的py文件,执行前需给予 xxx.py 执行权限,chmod 755 xxx.py 如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下: #!/usr/bin/env python print('Hello,World!) 四、编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。 ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536 注:此处说的的是最少2个字节,可能更多 UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话: 报错:ascii码无法表示中文 #!/usr/bin/env python print("你好,世界") 改正:应该显示的告诉python解释器,用什么编码来执...

Wifi 晶片漏洞 Broadpwn, iOS & Android 尽快更新

Apple 和 Android 同时都遇到的安全性问题,主要发生在硬体晶片上,下述为官方的更新链接: About the security content of iOS 10.3.3 - Apple Support Android Security Bulletin—July 2017 漏洞名称「Broadpwn」:用户手机开启「无线网(Wifi)」的功能,相同的网络信号范围内,骇客不需要手机PIN码或是密码,只需要借助「用户手机晶片正在搜寻Wi -Fi信号,就可以远端遥控手机装置。」对用户来说,在使用上仍有许多潜在的安全风险性。因此,如果你的手机有推送最新系统版本( iOS本周推出最新版本10.3.3 )的更新通知时,务必要尽快更新,以确个人资料安全。 Broadpwn 相关新闻: Broadpwn: Remotely Compromising Android and iOS via a Bug in Broadcom's Wi-Fi Chipsets If you use Wi-Fi on your iOS device, get this security update 下述整理自此篇 苹果用户快更新 Wi-Fi连线手机恐遭骇 该漏洞是由Exodus Intelligence的安全研究员Nitay Artenstein所发现,主要存在于采用Broadpwn 博通生产的「BCM43xx」系列WiFi 晶片等设备装置,其应用范围除了 苹果iPhone 5以上 、 第六代iPod Touch ,也同样应用在Android手机,例如 hTC、LG、三星 等也同样有使用这组晶片。