文件操作

 打开文件:文件句柄 = open('文件路径''模式')

 打开文件的模式
  1. w    #以写的方式打开 (不可读,不存在则创建,存在则删除内容)
  2. a #以追加的模式打开(可读, 不存在则创建,存在则追加内容)
  3. r #以只读模式打开
  4. "+" 表示可以同时读写某个文件
  5. r+ #以读写的模式打开
  6. w+ #以读写的模式打开
  7. a+ #以读写的模式打开
  8.  
  9. "b”表示处理二进制文件
  10. rb        #以二进制模式读打开
  11. wb        #以二进制写模式打开
  12. ab        #以二进制追加模式打开
  13.  
  14. rb+          #以二进制读写模式打开
  15. wb+         #以二进制读写模式打开
  16. ab+          #以二进制读写模式打开
  17.  
  18. "U" 表示在读取时,可以将\r \n \r\n 自动转换成\n (与r或者r+模式相同)
  19. rU
  20. r+U3
  21. fp = open("test.txt",w)
  22. fp.close    #关闭文件, 养成习惯,打开文件,用完后,记得关闭,否则有可能报ValueError
  23. fp.fileno     #返回一个文件描述符,使用底层的操作请求系统 I/O操作
  24. fp.flush    #刷新文件内容缓冲区
  25. fp.isatty    #文件是否是一个终端设备文件(unix系统中的)
  26. fp.next   #获取下一行的数据,不 存在则报错 。 for i in file: print i.strip() 就是调用这个next()方法
  27. fp.read([size]) #读取指定字节数的数据 以byte 为单位
  28. fp.readline([size]) #读一行,如果定义了size ,有可能返回一行中的部分
  29. fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。内部还是调用readline()方法
  30. fp.seek(offset[,whence]) #将文件操作移动到offset的位置,这个offset一般相对文件的开头开计算的,一般为整数,
  31. #0 从头开始计算
  32. #1 从当前位置开始计算
  33. #2 从未见末尾开始计算
  34. fp.tell #告诉文件操作的当前位置 ,从开头开始计算
  35. fp.truncate #把文件裁成规定的大小,默认是裁到当前文件操作标记的位置
  36. fp.write #往文件里面写内容
  37. fp.writelines #将一个字符串列表写入文件
  38. fp.closed #关闭文件
  39. fp.encoding  
  40. fp.errors                
  41. fp.mode              
  42. fp.name              
    fp.newlines            
    fp.softspace          

  

 

with 应用

 1,为了避免打开文件后,忘记关闭, 可以通过管理上下文: 
  1. with open("log.txt","r") as f: #只读的方式打开文件,alias 为f
  2. for line in f:
  3. print line #打印每一行
  4. #执行完成后内部会自动关闭并释放文件资源

  

 
 2, 在python2.7后,with又支持同时对多个文件的上下文进行管理
  1. with open("log1.txt") as obj1 , open("log2.txt") as obj2: #可以进行复制的操作
  2. for line in obj1:
  3. obj2.write(line)

  

python每行读取文件几种姿势

  1. #1 ,readline
  2. file = open("a.log","r")  
  3. whileTrue:
  4. line = file.readline()
  5. if not line:
  6. break
  7. pass
  8. #2 ,fileinput
  9. import fileinput
  10. file = open("a.log","r")
  11. for line in fileinput.input("a.log"):
  12. pass
  13.  
  14. #3 ,readlines
  15. file = open("a.log","r")
  16. whileTrue:
  17. lines = file.readlines(100000)
  18. if not lines:
  19. break
  20. for line in lines:
  21. pass
  22. #4 ,for循环
  23. file = open("a.log","r") # 相当于with open("a.log","r") as f:
  24. # for line in f:
  25. for line in file: # pass
  26. pass
  27.  
  28. #5 ,xreadlines
  29. file = open("a.log","r") #已经废弃
  30. for line in file.xreadlines():
  31. pass

         

自定义函数

 在学习函数之前,一直都是遵循面向过程编程,类似于shell脚本的功能,靠堆积一些命令来处理一些事情,按照业务的罗技从上到下的实现功能
 
    1. whileTrue:
    2. if cpu利用率> 90%:
    3. #发送邮件提醒
    4. 连接邮箱服务器
    5. 发送邮件
    6. 关闭连接
    7.  
    8. if 硬盘使用空间> 90%:
    9. #发送邮件提醒
    10. 连接邮箱服务器
    11. 发送邮件
    12. 关闭连接
    13.  
    14. if 内存占用> 80%:
    15. #发送邮件提醒
    16. 连接邮箱服务器
    17. 发送邮件
    18. 关闭连接

    看一下上面的代码 ,可以将if 语句内容提取出来公用,如下:

  1. def 发送邮件(内容)
  2. #发送邮件提醒
  3. 连接邮箱服务器
  4. 发送邮件
  5. 关闭连接
  6.  
  7. while True
  8.  
  9. if cpu利用率> 90%:
  10. 发送邮件('CPU报警')
  11.  
  12. if 硬盘使用空间> 90%:
  13. 发送邮件('硬盘报警')
  14.  
  15. if 内存占用> 80%:
  16. 发送邮件("内存报警")
 对于上述俩种实现的方式 ,第二次显示比第一次的重用性和可读性要好,其实这也是函数式编程和面向过程编程的区别
           函数式:将某功能代码封装到函数中, 日后便无需重复编写,仅需要调用函数即可
           面向对象:对函数进行分类和封装,让开发"更快,更强。。。" 
 函数式编程最重要的是增强代码的重用性和可读性          
 

函数的定义和使用

    1. def foo(args):
    2. print "hello,world!"
    3. return args
    4. ret = foo(name)
    5. print ret

      

 注意: 上面是调用一个函数 ,写错了
             foo(name) 改为 foo("name")

函数的参数

 为什么要使用参数  ?
    1. def 发送邮件(邮件内容) #邮件内容为参数
    2. #发送邮件提醒
    3. 连接邮箱服务器
    4. 发送邮件
    5. 关闭连接
    6. whileTrue
    7. if cpu利用率>90%:
    8. 发送邮件("CPU报警了。")
    9. if硬盘使用空间>90%:
    10. 发送邮件("硬盘报警了。")
    11. if内存占用>80%:
    12. 发送邮件("内存报警了。")

函数中参数的种类

 1 , 普通参数 
 
    1. def func(args):
    2. print args
    3. func("budonghsu")

      

 
 
 2 ,默认参数
    1. def func(name,age =18):
    2. print "%s : %s"%(name,age)
    3. func("budongshu",19)
    4. func("budongshu")
    5.  
    6. 运行结果:
    7. budongshu :19
    8. budongshu :18

      

 注意:默认参数要放在参数列表的最后面
 
 
 3 , 动态参数 
    1. def func(*arg): #可以接收列表,元组 ,字符串
    2. print arg
    3. 执行方式一
    4. name =[1,2,3,4]
    5. func(name)
    6. name =("a","b")
    7. func(name)
    8. 执行方式二
    9. func("bds",123)
    10.  
    11. 执行结果: #返回的是一个元组
    12. ([1, 2, 3, 4],) (('a', 'b'),) ('bds', 123)

      

 
    1. def func(**kwargs): #可以接收字典
    2. print kwargs
    3. func(name="bds",age=19)    #此方法还可以用来生成字典
    4. dict1 ={'name':"linux",'age':20}
    5. func(**dict1)
    6. 运行结果:
    7. {'age':19,'name':'bds'}
    8. {'age':20,'name':'linux'}

      

    1. def foo(*arg,**kwargs):
    2. print 'arg = ', arg
    3. print 'kwargs =', kwargs
    4. print '-------------------------'
    5. foo(1,2,3,4)
    6. foo(a=1,b=2,c=3)
    7. foo(1,2,3,4,a=1,b=2,c=3)
    8. foo('a',1,None,a=1,b='2',c=3)

      

  1.  运行结果:
    1. arg = (1,2,3,4)
    2. kwargs ={}
    3. -------------------------
    4. arg = ()
    5. kwargs ={'a':1,'c':3,'b':2}
    6. -------------------------
    7. arg = (1,2,3,4)
    8. kwargs ={'a':1,'c':3,'b':2}
    9. -------------------------
    10. arg = ('a',1,None)
    11. kwargs ={'a':1,'c':3,'b':'2'}
    12. -------------------------

      

python发邮件

#!/usr/bin/env python
#conding:utf-8 *_* 
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 
 
msg = MIMEText('my name is budongshu', 'plain', 'utf-8')
msg['From'] = formataddr(["budongshu",'bdstravel@126.com'])
msg['To'] = formataddr(["qq",'2329435445@qq.com'])
msg['Subject'] = "hello hero subnet"
 
server = smtplib.SMTP("smtp.126.com", 25)
server.login("bdstravel@126.com", "你的密码")
server.sendmail('bdstravel@126.com', ['2329435445@qq.com',], msg.as_string())
server.quit()
 
 详解如图:
 
 
 测试:
 
 
 
 
 
 
 
 
 
 

python 函数初识和文件操作的更多相关文章

  1. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  2. Python函数定义、文件操作(读写、修改)

    date:2018421 day3 一.函数定义 def  函数名(首字母大写) 增加程序可读性 #直接写函数名即可调用函数 #参数 ①.形参 ②.实参 ③.缺省参数 如果有默认值,调用的时候没有传递 ...

  3. python学习笔记-(七)python基础--集合、文件操作&函数

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...

  4. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

  5. Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法

    知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...

  6. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...

  7. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  8. Python基本语法_文件操作_读写函数详解

    目录 目录 软件环境 file文件对象 open文件操作 读文件 read读取所有文件内容 readline获取一行内容 readlines读取所有文件内容 readreadlinereadlines ...

  9. Python基础7:文件操作

    [ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...

随机推荐

  1. WPF WebBroswer可以用到的接口

    http://pinvoke.net/default.aspx/Interfaces.DWebBrowserEvents2 [ComImport, SuppressUnmanagedCodeSecur ...

  2. 【HDOJ】4513 吉哥系列故事——完美队形II

    这题目上学期就看了,不过最近发现可以用马拉车来解,而且还是基本算法. 稍微对回文串成立条件变形一下即可. /* 4513 */ #include <iostream> #include & ...

  3. [转]笔记本Ubuntu系统关闭独显+省电降温设置

    [转载者按]最近装了Ubuntu 13.04 64 bits版操作系统玩玩,但是发现两个显卡都开着,所以上网查找资料,以在不需要3D的时候关闭Nvidia显卡.通过Bumblebee软件包可以达到这一 ...

  4. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主 ...

  5. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  6. [Boost]图形处理库Boost::Polygon

    Background 工作中经师傅指导学习应用到了Boost::Polygon这个库,相对于Boost::Geometry,Polygon出自Intel.抽象于芯片流程,于是更贴近于芯片设计流程应用. ...

  7. HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)

    Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...

  8. PHP 获取时间的各种处理方式!

    今天写下php中,如何通过各种方法 获取当前系统时间.时间戳,并备注各种格式的含义,可灵活变通.1.获取当前时间方法date()很简单,这就是获取时间的方法,格式为:date($format, $ti ...

  9. vs2010 更新jQuery智能提示包

    vs2010 更新jQuery只能提示包时,可以直接在NuGet中更新 jquery-2.1.0-vsdoc.js jquery-2.1.0.js jquery-2.1.0.min.js jquery ...

  10. 城市连动纯js代码DEMO

    前台代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...