python7

来源:互联网 发布:一个淘宝号最多刷几单 编辑:程序博客网 时间:2024/06/14 07:11

文件的管理

输入(raw_input/input)—> 程序处理 —> 输出(print)

文件管理的三大步骤:

- 打开文件; f = open("filename")    - 处理文件;     f.read()                # 可以读取文件内容    f.write("hello")        # 不能往文件中写入,因为默认文件以r的模式打开;- 关闭并保存文件; f.close()

文件的几种模式总结:

r模式:

若文件不存在,直接报错;
文件只能读取,不能写入;

w模式:

若文件不存在,直接创建文件;
文件只能写入,不能读取;
打开文件时会清空原有文件内容;

r+模式:

若文件不存在,直接报错;
文件可以读也可以写;
具体写入的内容在哪里,由文件指针(句柄)决定;

w+模式:

若文件不存在,直接创建文件;
文件既能写入也能读取;
打开文件时会清空原有文件内容;

a

若文件不存在,直接创建文件;
文件只能写入,不能读取;
写入的内容直接追加到文件最后;

a+

若文件不存在,直接创建文件;
文件既能写入也能读取;
写入的内容直接追加到文件最后;

b

以二进制的方式打开文件,可以跟r,w,+等组合使用;

文件的读取

read() # 直接读取文件所有内容;
readline() # 每次读取文件一行内容,返回类型为字符串;
readlines() # 读取文件所有内容,以列表形式返回;
xreadlines() # 类似生成器,文件内容不直接以列表方式返回;

文件的写入

write(“str”) # 将字符串写入文件
writelines(“[“hello\n”,”world\n”]”) # 将序列的每个元素写入文件;

文件的其它操作

f.seek(偏移量,选项)
# 偏移量,如果为正数,代表向右偏移;如果为负数,代表向左偏移;
# 选项,如果为0,指针指向文件开始;
如果为1,指针指向当前位置;
如果为2,指针指向文件末尾;
f.flush() # 提交对文件的修改;

文件的几个注意点:

  • 文件对象是可迭代数据类型,可以通过for遍历文件的内容;
  • with open(“filename”) as f:通过这种方法来避免用户忘记关闭文件的问题;

练习题:
1. 显示文件的所有行,但忽略以#开头的行;
2. 逐页显示文本文件的程序,用户输入一个文件名,每次默认显示行数为10行,给用户一个选项,”是否继续?(Y|N)”

模块与包的管理

模块

  • 模块实质上就是一个以.py结尾的文件,可以被其他py文件调用;
  • 导入模块时,会去python的默认搜索路径中寻找;
  • python的默认搜索路径sys.path,
  • 添加自定义的搜索路径时,sys.path是一个列表,sys.apth.append(“path”);
    - sys.path.append(“/home/kiosk/1-Pythonv3/day08/code”)
    - sys.path.insert(0,’/home/kiosk’)
  • 导入一个模块的实质是将模块的文件重新运行一次;
  • 导入模块的方法:
    import module1,module2
    from 模块名 import 函数名
    from 模块名 import 函数名 as 函数别名
    import 模块名 as 函数别名

  • 导入一个包的实质是运行包里面的init.py文件;
  • 导入包的方法:
    import 包名.模块名
    from 包名 import 模块名
    import 包名(注意init.py函数的内容)

模块分类:

- 内置模块(os,sys,time)- 自定义模块- 第三方模块

常用的内置模块

os,sys,time,datetime,json/pickle,shutil,random

os模块

os.sep 可以取代操作系统特定的路径分割符。
os.name字符串指示你正在使用的平台。比如对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’。
os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.getenv()和os.putenv()函数分别用来读取和设置环境变量。 os.listdir()返回指定目录下的所有文件和目录名。
os.remove()函数用来删除一个文件。 os.system()函数用来运行shell命令。
os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’。
os.path.split()函数返回一个路径的目录名和文件名。
os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。
os.path.existe()函数用来检验给出的路径是否真地存在

sys模块

sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules.keys()
返回所有已经导入的模块列表 sys.exc_info()
获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 sys.exit(n)
退出程序,正常退出时exit(0) sys.hexversion
获取Python解释程序的版本值,16进制格式如:0x020403F0 sys.version
获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.maxunicode
最大的Unicode值 sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform
返回操作系统平台名称 sys.stdout 标准输出 sys.stdin 标准输入
sys.stderr 错误输出 sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix 返回平台独立的python文件安装的位置 sys.byteorder
本地字节规则的指示器,big-endian平台的值是’big’,

time模块

time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。##将一个时间戳转换为UTC时区(0时区)的struct_time。time.gmtime([secs])##返回当前时间的时间戳。>>> time.time()1504776294.995365##将一个struct_time转化为时间戳。time.mktime(t)##返回“进程时间”,它是用秒表示的浮点数(时间戳)。time.clock()##把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。time.asctime([t])##把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。time.ctime([secs])##把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。time.strftime(format[, t])##把一个格式化时间字符串转化为struct_time。是strftime()的逆操作。time.strptime(string[, format])

json模块
—json.dumps
json.dumps 用于将 Python 对象编码成 JSON 字符串。

json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

json.load从文件中反序列化为python对象kle模块

pickle.dump(obj, file[, protocol])  序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是12,表示以二进制的形式序列化pickle.load(file)  反序列化对象。将文件中的数据解析为一个Python对象。其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:clear_memo()  清空pickler的“备忘”。使用Pickler实例在序列化对象的时候,它会“记住”已经被序列化的对象引用,所以对同一对象多次调用dump(obj),pickler不会“傻傻”的去多次序列化

shutil模块

shutil.copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉shutil.move( src, dst)  移动文件或重命名shutil.copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的shutil.copystat( src, dst) 复制权限、最后访问时间、最后修改时间shutil.copy( src, dst)  复制一个文件到一个文件或一个目录shutil.copy2( src, dst)  在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西shutil.copy2( src, dst)  如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作shutil.copytree( olddir, newdir, True/Flase)把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接shutil.rmtree( src ) 递归删除一个目录以及目录内的所有内容

random模块

> random.random random.random()用于生成一个01的随机符点数: 0 <= n < 1.0> random.uniform   random.uniform的函数原型为:random.uniform(a,> b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <=> b。如果 a <b, 则 b <= n <= arandom.randint>   random.randint()的函数原型为:random.randint(a,> b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b   random.choice>   random.choice从序列中获取一个随机元素 random.shuffle>   random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱>   random.sample   random.sample的函数原型为:random.sample(sequence,> k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列

逐行显示一个文件里的内容,每10行为一页,显示十行后,询问是否继续,继续则一次输出一页

#!/usr/bin/env python#coding:utf-8"""file : xianshi2.pydata : 2017-09-06-11:05 AMAuthor : xshdesc : """f = open("/home/kiosk/Desktop/fine")a = 0l = f.readlines()print "This is 1 page"for i in l:    a += 1    # print i.strip()    if  a%10 == 0:        shuru = raw_input("Please input y or n :")        if shuru == "y":            print "This is {} page".format(a/10+1)            # print i.strip()        else:            exit()    print i.strip()f.close()
原创粉丝点击