一 有一种情况,在Windows系统上面有一个文件,编码为gbk,将其上传到Linux虚拟机,系统编码为utf-8,

使用cat命令查看时是乱码,这时如何解决?

  1. [root@localhost ~]# cat x.py
  2. #!/usr/bin/env python
  3. # -*- coding:utf-8 -*-
  4.  
  5. with open('hhh.txt',mode='r') as f1:
  6.   content=f1.read()
  7.   #content1=content.decode('gbk')#(u'\u4f60\u597d', <type 'unicode'>)
  8.   #content1=content.decode('gbk').encode('utf-8')#('\xe4\xbd\xa0\xe5\xa5\xbd', <type 'str'>)
  9.   content1=content.decode('gbk').encode('utf-8')
  10.   print(content1)
  11.   print(type(content1))
  12. ##结果为: #这个我认为首选
  13. #你好
  14. #<type 'str'>
  15. '''
  16. with open('hhh.txt','rb') as f1:
  17.   content=f1.read()
  18.   content1=content.decode('gbk')
  19.   print(content1)
  20.   print(type(content1))
  21. ###结果为
  22. #你好
  23. #<type 'unicode'>
  24. '''

如果想要使用cat命名查看而不报错呢

  1. [root@localhost ~]# cat xx.py
  2. #!/usr/bin/env python
  3. # -*- coding:utf-8 -*-
  4. import os
  5. with open('hhh.txt',mode='r') as f1,\
  6.   open('hhh.bak',mode='w') as f2:
  7.   content=f1.read().decode('gbk').encode('utf-8')
  8.   f2.write(content)
  9. os.remove('hhh.txt')
  10. os.rename('hhh.bak','hhh.txt')

二 运算符优先级

算术操作符>比较运算符>赋值运算符(=、-=、+=)>逻辑运算符

算数 + - * /   比较 > < == !=                                   逻辑  not and or

or的用法:遇到真就返回,没有的话就是False

    负数,整数都为真,返回数字本身,两数相遇取前值

    0和False属于同一级别,它们比较时,谁在后面取谁

and的用法:遇到假返回,没有的话一般为真

        两个元素相遇时,遇到0或者False,返回0或False

     两真相遇取后者

     0和False相遇,谁前取谁

三 编码

utf-8  英文:1 字节    中文 3 个字节

gbk  英文:  1字节    中文  2 字节

四 给一个列表去重,先转化成集合再转回列表    list(set(a))

五深浅copy

1 浅copy第一层各自独立,从第二层开始,共用一个内存地址

2 深copy无论多少层都是独立的

3 两个变量赋值就是同一个内存地址,一个改变,另外一个也会改变

4 通过切片赋值属于浅copy,第一层变化不会影响另外一个,从第二层开始变化会同步,例如:a=b[:]

六:fromkyes

fromkeys(前面,后面)是创建一个字典

前面可以是字符串,则每个字符都是一个键

前面可以是列表,则每个元素都是一个键

前面可以是元组,则每个元素都是一个键

前面可以是字典,则它的键值作为新字典的键

后面是一个整体,作为新字典的值

七列表,字典相加

列表:[1,2,3]+[4,5,6]

字典:print(dict({'1':'a','2':'b'},**{'3':'c','4':'d'}))

八 列表加上多个元素

一个列表往往有很多元素,甚至往往要加上一些元素

列表在后面加上多个元素的方法:

  1. 例如:l5=[1,2,3]
  2.  
  3.     l5[10:]='a','b','c' #这里的10可以为其他数字,只有大于2就成
  4.  
  5.     print(l5) #结果为[1,2,3,'a','b','c']

九 关于类中的super()

super方法找的是父类的方法,那到底怎么理解呢,是不是找的是当前类的父类?

  1. class Foo:
  2. def f1(self):
  3. print('foo.f1')
  4. super().f2() #super它会按照下面Sub.mro()的顺序去找上一层找到了 <class '__main__.Bar'>
  5. #尽管Foo和Bar没有关系,所以super是按照mro的列表查找的
  6. class Bar:
  7. def f2(self):
  8. print('Bar.f2')
  9.  
  10. class Sub(Foo,Bar):
  11. pass
  12. s=Sub()
  13. print(Sub.mro()) #[<class '__main__.Sub'>, <class '__main__.Foo'>, <class '__main__.Bar'>, <class 'object'>]
  14. #mro()是查找当前类的继承顺序
  15. s.f1()
  16. #结果为
  17. foo.f1
  18. Bar.f2

十关于可hash对象,什么可以作为字典的key

我们知道要作为字典的key,它必须是不可变得,也就是可hash,有int,float,str,tuple,frozenset

可hash对象它就要求这个对象不能有多个值

例如

  1. >>> a=('a','b',)
  2. >>> print(id(a))
  3. 2611973911432
  4. >>> a=('a','b','c')
  5. >>> print(id(a))
  6. 2611973840184 #id地址改变了,可以作为hash对象
  7.  
  8. >>> b=['a','b',]
  9. >>> print(id(b))
  10. 2611973903688
  11. >>> print(id(b))
  12. 2611973903688
  13. >>> print(id(b))
  14. 2611973903688
  15. >>> b.append('c')
  16. >>> print(id(b))
  17. 2611973903688 #id的值一直没变

那么元组里面嵌套是否可以hash呢

  1. # e=([1,2,3],'b','c')
  2. # print(id(e)) #1940510753560
  3. # e[0].append(4)
  4. # print(id(e)) #1940510753560 #id值没变
  5.  
  6. # s={([1,2,3],'b','c'):'a'}
  7. # print(hash(s)) #TypeError: unhashable type: 'list'

因此,元组要作为可hash对象,必须是单纯的元组

不可变对象:value的值变了,id的值也跟着一起变

可变对象:在id不变的情况下,value的值可以变

十一:返回一个字典键的列表

  1. s={'a':1,'b':2,'c':3}l=list(s) 扩展,返回一个字典的values值组成的列表 l1=list(s.values())

十二:列表的pop不带索引就是删除最后一个元素

十三:关于新式类和经典类

python2中使用的是经典类,深度优先,可以修改成新式类

python3中默认使用的就是新式类,新式类使用的是广度优先

十三:关于集合set的哈希和不可哈希

  1. set1={1,2,3}
    # dic={set1:'a'}
    # print(dic) #报错 TypeError: unhashable type: 'set'
    set2=frozenset(set1) #集合使用frozenset就可哈希了
    print(set2) #frozenset({1, 2, 3})
    dic1={set2:'a'}
    print(dic1) #{frozenset({1, 2, 3}): 'a'}

十四:关于 modules

Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。

如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。

import test2  --->对应的内存中找到的是  sys.modules['test2']

from a import test2   ---->对应的内存中   sys.modules['a.test2']

十五 关于__str__和__repr__

我们来看一个例子

  1. class Fruit:
  2. def __str__(self):
  3. return 'Fruit_str'
  4.  
  5. def __repr__(self):
  6. return 'Fruit_repr'
    aa=Fruit()

如果我们打印

  1. print(aa) #输出为 Fruit_str
    print(repr(aa)) #输出为Fruit_repr

如果我们修改一下呢

  1. class Fruit:
  2. # def __str__(self):
  3. # return 'Fruit_str'
  4.  
  5. def __repr__(self):
  6. return 'Fruit_repr'
  7.  
  8. bb=Fruit()
    print(bb) #输出为 Fruit_repr

总结:单纯print对象的是首先查找 __str__,没有就会找__repr__

  1.  

python零散补充与总结的更多相关文章

  1. Python零散收集:

    Python零散收集 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵 ...

  2. PYTHON 100days学习笔记007-2:python数据类型补充(2)

    目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...

  3. PYTHON 100days学习笔记007-1:python数据类型补充(1)

    目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...

  4. python 知识点补充

    python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...

  5. 7.python模块补充

    此文章是对上节文章模块的补充 一,xml模块 xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言.xml的格式如下 ...

  6. 3.python基础补充(集合,collection系列,深浅拷贝)

    一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复 ...

  7. python模块补充

    一.模块补充 configparser 1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -opti ...

  8. Python 面向对象-------补充

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  9. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

随机推荐

  1. C#:匿名类型

    匿名类型和var关键字是Visual C# 3.0提供的一个新特性,var是隐式类型而并不是类型javascript中的var. var user = new { Id = 1, Name = &qu ...

  2. 关于SD-SDI,HD-SDI,3G-SDI行号的问题

    关于SD-SDI,HD-SDI,3G-SDI行号的问题 1.资料来源 2.行号的插入信号 SD-SDI mode的信号不需要行号 HD-SDI,3G-SDI mode的信号必须插入行号 3.edh的插 ...

  3. WPF DataGrid 用法

    XAML==> <Window x:Class="QueueSystem.MainWindow" xmlns="http://schemas.microsof ...

  4. 黄聪:实用WordPress SQL查询方法

    为所有文章和页面添加自定义字段 这段代码可以为WordPress数据库内所有文章和页面添加一个自定义字段. 你需要做的就是把代码中的‘UniversalCutomField‘替换成你需要的文字,然后把 ...

  5. Java第11次实验(数据库)

    参考资料 数据结构实验参考文件 数据库初始化文件 MySQL操作视频 数据库相关jar文件请参考QQ群文件. 第1次实验 1. MySQL数据库基本操作 完整演示一遍登录.打开数据库.建表.插入 常见 ...

  6. MSSQL 2008 密钥

    sql server2008 r2 密钥 Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise: JD8Y6-HQG69-P9H84-XDTPG-34M ...

  7. 引用 自动化测试基础篇--Selenium简介

    原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...

  8. 【spring】之事物配置,声明式事务管理和基于@Transactional注解的使用

    http://blog.csdn.net/bao19901210/article/details/41724355

  9. C++中sort函数小结

    我们都知道,sort函数是C++标准库<algorithm>中的一个库函数.它的功能是对数组/容器中的元素进行排序.用法示例如下: 一.对数组进行排序 示例: int a[] = {1,3 ...

  10. 服务网关zuul之三:zuul统一异常处理

    我们详细介绍了Spring Cloud Zuul中自己实现的一些核心过滤器,以及这些过滤器在请求生命周期中的不同作用.我们会发现在这些核心过滤器中并没有实现error阶段的过滤器.那么这些过滤器可以用 ...