设为首页 收藏本站
查看: 1275|回复: 0

[经验分享] python 第三节

[复制链接]

尚未签到

发表于 2018-8-14 07:33:51 | 显示全部楼层 |阅读模式
  一、字符编码
  字符编码:把人的字符翻译成计算机能够认识的数字。
  字符编码表:就是一张字符与数字对应关系的表。
  例如:ascii、gbk、utf-8、unicode
  unicode ----> encode('utf-8') ----> bytes
  bytes   ----> decode('utf-8') ----> unicode
  python3中的字符串分为2种:
  x='aa'#存成unicode
  y=x.encode('utf-8')#此时转存成bytes
  unicode与bytes#python3默认是unicode
  python2中的字符串也分为2种:
  x=u'aa'#与python3的字符串概念一样
  y='bb'#与pyhton3的bytes一样。
  unicode与bytes
  python3默认的格式就是unicode
  总之一句话:字符以什么格式编码、就要以什么格式解码。
  二、文件的操作
  1、r读模式、文件不存在的时候,不会创建文件。
  f = open('a.txt','r',encoding='utf-8')
  print(f.read())
  1.1 b模式:#此时不在需要制定编码格式
  f = open('a.txt','br')
  print(f.read())
  f.close()
  #指定字符解码
  f = open('a.txt','rb')
  print(f.read().decode('utf-8'))
  f.close()
  1、w写模式、文件存在清空文件、不存在创建文件。
  f = open('a.txt','w')
  f.write('111')
  f.close()
  1.1、writeable 是否可写
  f = open('a.txt','w')
  f.write('111')
  print(f.writable())
  f.close()
  1.2、写入一行:
  f = open('a.txt','w')
  f.writelines('1111\n22222222222')
  f.close()
  1.3、a追加模式、文件不存在创建、文件存在跳到文件末尾。
  f = open('a.txt','a')
  f.writelines('111a1\n22222222222')
  f.close()
  1.3.1、查看文件的光标位置
  f = open('a.txt','a')
  f.writelines('111a1\n22222222222')
  print(f.tell())#打印光标的位置,追加一般光标会到结尾处。
  f.close()
  #打开文件就会跳到文件的结尾处、文件不存在的时候会创建文件。
  总结:
  文件的操作方式中:读只能读不能追加和写入、写只能写不能读和追加、追加也只追加,但这是默认的情况,如果需要在写的时候读或者在读的时候写请使用权限a+,r+,w+
  文件的操作方法中:只有w和a在文件不存在的情况下才会创建文件。
  1.4 rb模式、直接读取bytes模式。
  f = open('a.txt','rb')
  print(f.read())
  1.4.1 wb模式、直接写入b模式,但是默认情况是不能直接写入的、需要encode。
  f = open('a.txt','wb')
  f.write('aaaaa'.encode('utf-8'))
  1.4.2 ab 模式需要加encode
  需要注意的是:我们在文件操作结束后执行的f.close()操作,其实是在操作系统层面上关闭了文件,但是在程序中所定义的f = open()变量依然还是存在的。只有del 变量 ,变量才会清除。也就是说文件关闭了,但是方法依然存在,且方法不能执行!!!!
  1.4、cpoy 文件使用rb和wb
  import  sys
  if len(sys.argv) < 3:
  print('参数不够!')
  elif len(sys.argv) > 3:
  print('参数不对!')
  else:
  with open(r'%s' %sys.argv[1],'rb') as read_f,open(r'%s' %sys.argv[2],'wb') as write_f:
  for line in read_f:
  write_f.write(line)
  #使用rb模式就不在需要考虑编码的问题了。
  1.5 文件的其他操作:文件的操作read()默认是以字符为基础,全部读取,一次默认读取一个字符。
  f =open('a.txt','r')
  print(f.read())
  f =open('a.txt','rb')
  print(f.read(3).decode('utf-8'))
  #一个中文汉字占3个字符位、如果在read过程中字符数如果不是3的倍数、会报错,默认以字节为单位读取。
  seek()控制光标的位置。默认以文件开头为参照.
  0代表从头开始,1代表当前位置,2代表文件最末尾位置。
  你好啊xiaoming
  f = open('a.txt','r',encoding='utf-8')
  print(f.read(1))
  print(f.tell())
  f.seek(6)
  print(f.read(1))
  你
  3
  啊
  f = open('a.txt','rb')
  print(f.read(3).decode('utf-8'))
  print(f.tell())
  f.seek(6,0)
  print(f.read(3).decode('utf-8'))
  你
  3
  啊
  f = open('a.txt','rb')
  print(f.read(3))
  print(f.tell())
  f.seek(3,1)
  print(f.tell())
  print(f.read().decode('utf-8'))
  b'\xe4\xbd\xa0'
  3
  6
  啊xiaominghehe
  seek 有3中模式。0 1 2
  1和2模式必须在b模式下才可运行
  0模式以文件开头
  1模式以当前的光标为参照物
  #模拟tailf 命令
  import  time
  import  sys
  with open(r'%s' %sys.argv[2],'rb') as f:
  f.seek(0,2)
  while True:
  line = f.readline()
  if line:
  print(line.decode('utf-8'),end='')
  else:
  time.sleep(0.3)
  1.6 truncate 截取字符
  你好啊xiaoming
  with open('a.txt','r+',encoding='utf-8') as f:
  f.truncate(9)
  你好啊
  #但是如果截取的字符少了,会出现乱码的情况
  如果文件为空,截取为空格。
  三、函数
  随着程序的功能越多、代码的复杂度也越来越大、组织结构不清晰、可读性较差。
  代码的冗余和可扩展性差。工具即函数、使用即调用。
  1、函数的分类:
  1、内置函数
  len() print() max() ……
  2、自定义函数
  2、函数的使用:
  1、先定义函数{定义函数只是检查语法、不执行代码}
  2、在调用函数
  函数的定义与变量的定义类似、没有事先定义变量、而直接引用变量,会报错。
  没有事先定义函数、而直接调用函数、就相当于引用一个不存在的变量名。
  3、函数的定义:
  def 函数名(arg1,arg2,arg3):
  '''注释'''
  函数体
  return 返回值没有类型的限制、return可以有多个、但是只会执行一次、并且将return后面的结果返回。没有return 返回none。
  有参函数都需要返回值、无参函数一般不需要返回值。
  函数的调用可以当做其他函数的参数。
  函数名:一般是动词、注释信息一定要有
  参数 。。。。
  4、定义函数的三种形式:
  1、无参函数:仅仅用来执行一些操作、比如用户交互、打印。
  2、有参函数:需要外部传进来的参数、才能执行相关的逻辑。
  3、空函数:设计代码的结构。
  5、函数的参数分为实参和形参。
  实参会占用内存空间,形参不占用内存空间。
  形参就是变量名:实参就是变量值。
  函数在调用阶段实参才会绑定形参。
  6、参数的分类;
  1、位置参数:位置按照从左到右的顺序依次定义的参数。
  位置形参:定义变量
  位置实参:与形参一一对应
  语法规定:位置实参必须在关键字实参的前面。
  同一个形参不能传多次值。
  2、关键字实参:指名道姓给name传值、name=value
  3、默认形参:在定义阶段就已经为形参赋值、意味着在调用阶段可以不用传值。
  def foo(x,y=11111):
  print(x)
  print(y)
  foo(1,'a')
  默认参数必须放在位置参数之后。默认参数只在定义阶段赋值一次、而且只是一次。
  默认参数的值应该定义成不可变的类型。****
  7、可变长参数是指实参的个数不固定。
  实参分为位置实参与关键字实参2种。
  形参必须要有2中机制来分别处理按照位置定义的实参溢出的情况:*
  按照关键字定义的实参溢出的情况**
  溢出的参数按位置交个*处理、并且会将这些溢出的参数赋值给args
  如果没有溢出的情况,args返回一个空元组。
  def foo(x,y,*args):
  print(x)
  print(y)
  print(args)
  foo(1,2,3,4,5,6,7)
  def foo(x,y,**kwargs):
  print(x)
  print(y)
  print(args)
  foo(x=1,y=2,z=3)
  1
  2
  {'z': 3}
  #关键字溢出会将溢出的参数放到一个字典中保存。
  *代表位置参数,
  在*后面定义的形参成为关键字参数、必须以关键字形参形式传参。
  *后面的形参必须要关键字传参。
  def foo(name,age,*,sex='male',group):
  print(name)
  print(age)
  print(sex)
  print(group)
  foo('zs',111,group='sc',sex='male')
  zs
  111
  male
  sc
  *agrs 与**kwargs 联用。
  def foo(name,age=100,*args,sex='male',group,**kwargs):
  **代表关键字参数
  一个参数不能赋值2次。!!
  *args 扩展方法:
  def foo(x,y,*args):
  print(x)
  print(y)
  print(args)
  foo(1,5,*(1,3,4,5))
  1
  5
  (1, 3, 4, 5)
  def foo(x,y):
  print(x)
  print(y)
  print(args)
  foo(*(4,5))
  4
  5
  函数是第一类的对象:指的是函数可以被当做数据传递。
  函数可以当做函数的返回,可以当做容器类型的元素。
  @补充python格式化字符串
  格式描述
  %%百分号标记 #就是输出一个%
  %c字符及其ASCII码
  %s字符串
  %d有符号整数(十进制)
  %u无符号整数(十进制)
  %o无符号整数(八进制)
  %x无符号整数(十六进制)
  %X无符号整数(十六进制大写字符)
  %e浮点数字(科学计数法)
  %E浮点数字(科学计数法,用E代替e)
  %f浮点数字(用小数点符号)
  %g浮点数字(根据值的大小采用%e或%f)
  %G浮点数字(类似于%g)
  %p指针(用十六进制打印值的内存地址)
  %n存储输出字符的数量放进参数列表的下一个变量中
  %格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。
  负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。
  可指定最小的字段宽度,如:"%5d" % 2。也可用句点符指定附加的精度,如:"%.3d" % 3。
  e.g.
  # 例:数字格式化
  nYear = 2018
  nMonth = 8
  nDay = 18
  # 格式化日期 %02d数字转成两位整型缺位填0
  print  '%04d-%02d-%02d'%(nYear,nMonth,nDay)
  >> 2018-08-18# 输出结果
  fValue = 8.123
  print '%06.2f'%fValue# 保留宽度为6的2位小数浮点型
  >> 008.12# 输出
  print '%d'%10# 输出十进制
  >> 10
  print '%o'%10# 输出八进制
  >> 12
  print '%02x'%10# 输出两位十六进制,字母小写空缺补零
  >> 0a
  print '%04X'%10# 输出四位十六进制,字母大写空缺补零
  >> 000A
  print '%.2e'%1.2888# 以科学计数法输出浮点型保留2位小数
  >> 1.29e+00
  格式化操作符辅助指令
  符号              作用
  *           定义宽度或者小数点精度
  -           用做左对齐
  +          在正数前面显示加号( + )
  <sp>      在正数前面显示空格
  #         在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于
  用的是'x'还是'X')
  0        显示的数字前面填充‘0’而不是默认的空格
  %           '%%'输出一个单一的'%'
  (var)    映射变量(字典参数)
  m.n       m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
  以下是一些使用格式字符串的例子:
  十六进制输出:
  >>> "%x" % 108
  '6c'
  >>>
  >>> "%X" % 108
  '6C'
  >>>
  >>> "%#X" % 108
  '0X6C'
  >>>
  >>> "%#x" % 108
  '0x6c'
  浮点数和科学记数法形式输出:
  >>>
  >>> '%f' % 1234.567890
  '1234.567890'
  >>>
  >>> '%.2f' % 1234.567890
  '1234.57'
  >>>
  >>> '%E' % 1234.567890
  '1.234568E+03'
  >>>
  >>> '%e' % 1234.567890
  '1.234568e+03'
  >>>
  >>> '%g' % 1234.567890
  '1234.57'
  >>>
  >>> '%G' % 1234.567890
  '1234.57'
  >>>
  >>> "%e" % (1111111111111111111111L)
  '1.111111e+21'
  整数和字符串输出:
  >>> "%+d" % 4
  '+4'
  >>>
  >>> "%+d" % -4
  '-4'
  >>>
  >>> "we are at %d%%" % 100
  'we are at 100%'
  >>>
  >>> 'Your host is: %s' % 'earth'
  'Your host is: earth'
  >>>
  >>> 'Host: %s/tPort: %d' % ('mars', 80)
  'Host: mars Port: 80'
  >>>
  >>> num = 123
  >>> 'dec: %d/oct: %#o/hex: %#X' % (num, num, num)
  'dec: 123/oct: 0173/hex: 0X7B'
  >>>
  >>> "MM/DD/YY = %02d/%02d/%d" % (2, 15, 67)
  'MM/DD/YY = 02/15/67'
  >>>
  >>> w, p = 'Web', 'page'
  >>> 'http://xxx.yyy.zzz/%s/%s.html' % (w, p)
  'http://xxx.yyy.zzz/Web/page.html'

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551360-1-1.html 上篇帖子: Python基础5 常用模块 下篇帖子: 典型python文件结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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