一. python 打开文件的方法

1. python中使用open函数打开文件,需要设定的参数包括文件的路径和打开的模式。示例如下:

 f = open('a.txt', 'r+')

2. f为打开文件的句柄,具体读取文件的操作需要调用f的方法,示例如下:

 f = open('a.txt', 'r+')

 # read 以字符串形式打开整个文件
f.read() # readline 每次只读取一行的内容,到下一次时才加载下一次
l = f.readline()
print(l)
while l:
f.readline()
print(l) # readlines 读取所有行以列表形式返回
for i in f. readlines():
print(i)

此外上述三个方法都有一个可选参数,是一个int类型的,限制读取内容最大size的。如果需要读取的内容很大,则只能使用readline方法一点点读取。

3. 其实打开文件的句柄本身也是可以迭代的,示例如下:

 f = open('a.txt', 'r+')
# f也是每次只读取一行的内容,不过f是可以直接循环迭代的
for i in f:
print(i)

4. 写文件的函数包括write和writelines,区别为前者入参是一个str,后者为列表,示例如下:

 f = open('a.txt', 'w+')

 # write是把入参的字符整个原样写入文件的
f.write('saff1\nwqwq') # 注意writelines写入列表时候不会在每个元素后面加上换行,
# 写到文件里以后是会连起来的,要换行需要自己加
l = ['', '', '']
f.writelines(l) f.writelines(['%s\n'%i for i in l])

5. 使用文件结束后需要把文件句柄关闭,示例如下:

 f = open('a.txt', 'w+')
f.close()

6. 如果使用with来打开文件,则不需要close了,关于文件操作的打开关闭已经直接封装好了,示例如下:

 with open('a.txt', 'r+') as f:
print(f.read())

7. 整理打开的模式如下:

二. python一些内置函数整理

详细的官网文档链接 https://docs.python.org/3/library/functions.html

三. 装饰器

装饰器实际是一种接受函数作为参数的函数的语法糖。

1. 最普通的装饰器示例如下:

 # 修饰不需要入参的函数
def deco(func):
def _deco():
print("before myfunc()")
res = func()
print(" after myfunc()")
return res
return _deco @deco
def myfunc():
print(" myfunc() start")
return True # 修饰有入参的函数
def deco2(func):
def _deco(a, b):
print("before myfunc()")
res = func(a, b)
print(" after myfunc()")
return res
return _deco @deco2
def myfunc2():
print(" myfunc() start")
print(a, b)
return True

2. 修饰参数不确定的函数,示例如下

 # 修饰入参数量不定的函数
def deco(func):
def _deco(*args, **kwargs):
print("before myfunc()")
res = func(a, b)
print(" after myfunc()")
return res
return _deco @deco
def myfunc(a):
print(" myfunc() start")
print(a)
return True @deco
def myfunc2():
print(" myfunc() start")
print(a, b)
return True

3. 自身带有入参的装饰器,示例如下:

 def deco(sign):
def wraper(func):
def _deco(*args, **kwargs):
print("%s before myfunc()"%sign)
res = func(a, b)
print(" after myfunc()")
return res
return _deco
return wraper @deco("func1")
def myfunc(a):
print(" myfunc() start")
print(a)
return True @deco("func2")
def myfunc2():
print(" myfunc() start")
print(a, b)
return True

4. 带有类作为入参的装饰器,示例如下:

 class locker:
def __init__(self):
print("locker.__init__() should be not called.") @staticmethod
def acquire():
print("locker.acquire()") @staticmethod
def release():
print(" locker.release() called") # 作为入参的类必须实现acquire和release静态方法
def deco(cls):
def wraper(func):
def _deco():
print("before %s called [%s]." % (func.__name__, cls))
cls.acquire()
try:
return func()
finally:
cls.release()
return _deco
return wraper @deco(locker)
def myfunc():
print(" myfunc() called.")

四. configparser库

在这次完成的作业,实现用户系统存储在文件中的需求。如果信息不是很大,可以使用python中的configparser库来实现,更加方便。(在python2中该库叫ConfigParse,需要pip来安装)

该库实现了操作ini风格类型文件的各种方法。ini风格类型示例如下:

 []
password =
admin_flag = []
password =
admin_flag = []
password =
admin_flag =

每个[]代表一个section,下面一个等号对代表这个section的一项属性和值。使用configparser的各种方法示例如下:

 cf = configparser.ConfigParser()
# 读取文件
cf.read('a.conf') # sections方法返回所有的section名字的列表
for sec in cf.sections():
print(sec) # 增加一个新的section
cf.addsection('')
# 给新的section'555'增加属性
set('', 'password', '') # 原有的section的属性也可以更改,和增加的方法一致
set('', 'password', '') # 通过get和getint方法之类可以取到一个section的一个属性的值
cf.get('', 'password')
cf.getint('', 'password') # 通过items可以获得一个section的所有属性
cf.items('') # 更改结束以后,用write修改文件
cf.write(open('a.conf', "w")

五. python内置的sorted用法

sorted是内置的对一个序列进行排序的方法,必须包含一个序列的入参,其他还有可选入参key,cmp(注意python3没这个了),reverse。

1. key参数的值为一个函数,此函数将在每个元素比较前被调用,它只有一个参数且返回一个值,让sorted用这里返回的值进行比较,示例如下:

 student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),]
# 这里取每个元素的最后一个元素比较
sorted(student_tuples, key=lambda student: student[2]) # 这里就取每个字母的小写比较
sorted("This is a test string from Andrew".split(), key=str.lower)

2. cmp参数示例如下:

 def numeric_compare(x, y):
return x - y # cmp接受一个返回bool类型变量的函数,
# 用于定义一些比较比较
# 其入参代表序列中前后两个元素
sorted([5, 2, 4, 1, 3], cmp=numeric_compare)

在网上找到一个很牛叉的,从2->3移植代码时候,转换cmp到key的方法如下:

 def cmp_to_key(mycmp):
'Convert a cmp= function into a key= function'
class K(object):
def __init__(self, obj, *args):
self.obj = obj
def __lt__(self, other):
return mycmp(self.obj, other.obj) < 0
def __gt__(self, other):
return mycmp(self.obj, other.obj) > 0
def __eq__(self, other):
return mycmp(self.obj, other.obj) == 0
def __le__(self, other):
return mycmp(self.obj, other.obj) <= 0
def __ge__(self, other):
return mycmp(self.obj, other.obj) >= 0
def __ne__(self, other):
return mycmp(self.obj, other.obj) != 0
return K

调用的时候这样:

 sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric))

3. reverse值为bool类型,即确定是否需要倒序排列。

python基础整理笔记(四)的更多相关文章

  1. python基础整理笔记(一)

    一. 编码 1. 在python2里,加载py文件会对字符进行编码,需要在文件头上的注释里注明编码类型(不加则默认是ascII). # -*- coding: utf-8 -*- print 'hel ...

  2. python基础整理笔记(九)

    一. socket过程中注意的点 1. 黏包问题 所谓的黏包就是指,在TCP传输中,因为发送出来的信息,在接受者都是从系统的缓冲区里拿到的,如果多条消息积压在一起没有被读取,则后面读取时可能无法分辨消 ...

  3. python基础整理笔记(八)

    一. python反射的方式来调用方法属性 反射主要指的就是hasattr.getattr.setattr.delattr这四个函数,作用分别是检查是否含有某成员.获取成员.设置成员.删除成员. 此外 ...

  4. python基础整理笔记(五)

    一. python中正则表达式的一些查漏补缺 1.  给括号里分组的表达式加上别名:以便之后通过groupdict方法来方便地获取. 2.  将之前取名为"name"的分组所获得的 ...

  5. python基础整理笔记(二)

    一. 列表 1. 创建实例: a = [1,2,3] b = list() 2. 主要支持的操作及其时间复杂度如下: 3. 其他 python中的列表,在内存中实际存储的形式其实是分散的存储,比较类似 ...

  6. python基础整理笔记(七)

    一. python的类属性与实例属性的注意点 class TestAtt(): aaa = 10 def main(): # case 1 obj1 = TestAtt() obj2 = TestAt ...

  7. python基础整理笔记(三)

    一. python的几种入参形式:1.普通参数: 普通参数就是最一般的参数传递形式.函数定义处会定义需要的形参,然后函数调用处,需要与形参一一对应地传入实参. 示例: def f(a, b): pri ...

  8. python基础整理笔记(六)

    一. 关于hashlib模块的一些注意点 hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD ...

  9. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

随机推荐

  1. WinCE系统深度定制汇总

    WinCE应用程序崩溃提示框的处理 WinCE6.0多国语言软键盘 定制WinCE6.0标准界面的一种方法 如何禁用WinCE下的沙漏图标 Silent RNAApp.exe for WinCE6.0 ...

  2. ios实现程序切入后台,实现后台任务 (转自)

    ,项目需求,是程序home键切入后台,3分钟后退出登陆, 首先,iOS 会再持续切入后台,给我们5秒钟的时间去处理相关数据,5秒后,程序不会再执行任何代码,处于挂起状态. - (void)applic ...

  3. TortoiseSVN 版本回滚

    尝试用TortoiseSVN进行版本回滚,回滚到的版本和实际的内容有出入,可能是点了太多次给点乱了,囧~ 不过发现一个比较靠谱的方法,如下: 右键点击文件TortoiseSVN->showlog ...

  4. 纸上谈兵:队列(queue)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 队列(queue)是一个简单而常见的数据结构.队列也是有序的元素集合.队列最大的特 ...

  5. Excel_常用快捷键

    Ctrl+B        粗体Ctrl+U         下划线Ctrl+I         斜体Ctrl+5      删除线Ctrl+9      隐藏选中的行Ctrl+0      隐藏选中 ...

  6. SQL SELECT语句

    基本SQL SELECT语句   1.       下面的语句是否可以执行成功 select ename , job , sal as salary  from emp; 2.       下面的语句 ...

  7. RedHat下编译安装Boost

    1.解压boost_1_54_0.tar.gz 2.进入目录后,运行 ./bootstrap.sh ,会生成一个 bjam 的可执行程序 3.运行 ./bjam release install 进行编 ...

  8. 使用ssh-keygen设置ssh无密码登录

    http://lhflinux.blog.51cto.com/1961662/526122 ssh-keygen -t rsa 输入后,会提示创建.ssh/id_rsa.id_rsa.pub的文件,其 ...

  9. iOS9的新特性以及适配方案

    新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式.iOS 9为开发者提供5000个全新的API. 1. 限制HTT ...

  10. ASP.NET ZERO 学习 事件总线

    用于注册和触发客户端的全局事件. 介绍 Pub/sub事件模型广泛用于客户端,ABP包含了一个简单的全局事件总线来 注册并 触发事件. 注册事件 可以使用abp.event.on来注册一个全局事件.一 ...