一. 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. COM调用 – VB、PB

    本文使用Delphi和C++创建CRC32的COM文件(Dll). VB: V6.0 PB: V8.0 Delphi创建的文件,提供给VB6调用:C++创建的文件,提供给PB8调用. 一.VB部分 C ...

  2. dedecms代码研究三

    上次,我们从dedecms的index.PHP文件中了解到了很多信息,也提出了一些问题: 1)加载了/include/common.inc.php,里面做了哪些工作? 2)/include/arc.p ...

  3. 2016/12/14---- C3P0

    查询查询一条记录 public UserBean findActiver(String ac) throws SQLException { QueryRunner qr = new QueryRunn ...

  4. winform客户端向web地址传参,怎样去接收参数。

    在web端定义js方法去接收客户端传递过来的参数,具体就是获取地址中?后的数据,各个参数用&分割,存储于数组中,获取. 具体如下: //定义获取地址中参数的方法 function GetReq ...

  5. C++ 用libcurl库进行http通讯网络编程

    使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...

  6. HttpURLConnection下载图片的两种方式

    public class MainActivity extends AppCompatActivity { private ImageView iv; private String imageurl ...

  7. HDU 3775 Chain Code ——(Pick定理)

    Pick定理运用在整点围城的面积,有以下公式:S围 = S内(线内部的整点个数)+ S线(线上整点的个数)/2 - 1.在这题上,我们可以用叉乘计算S围,题意要求的答案应该是S内+S线.那么我们进行推 ...

  8. UML类图画法及其之间的几种关系

    最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的几种关系:泛化(Generaliz ...

  9. Git版本控制教程

    Git 版本控制入门 不了解Git请查看权威Git书籍 ProGit(中文版). 一份很好的 Git 入门教程,点击这里查看. Git客户端下载地址: 官方Git - TortoiseGit - So ...

  10. python第十三天

    这几天在欺负docker兽,很是开心,但是没想到领导突然让我去殴打openstack兽,完全没有兴趣嘛,毕竟前一阵一直在吊打它,当然啦,对于愚蠢的人类而言openstack兽是十分强大的,不过对于北方 ...