打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python文件管理实例应用

文件管理

  • Python内置了读写文件的函数,用法和C兼容
  • 操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(又称文件描述符),然后,通过操作系统提供的接口从这个文件对象操作

文件读写三部曲

  • 打开文件
  • 向文件中写入内容
  • 关闭文件

文件操作完整的过程

#1.open内置函数打开文件,返回值是一个文件对象;默认文件打开方式——只读#新建一个文件hello[kiosk@fundation86 Desktop]$ touch hello#open内置函数打开文件f = open("/home/kiosk/Desktop/hello")# 如果文件不存在, open() 函数就会抛出一个 IOError 的错误,并且给出错误码和详细的信息告诉你文件不存在print type(f)#<type 'file'>#2.读取文件内容f.read()#如果文件打开成功,接下来,调用 read() 方法可以一次读取文件的全部内容#3.关闭文件f.close()#文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源。

文件操作的其他模式

模式不同的三个点
  • 文件不存在,是否报错
  • 文件是否只读,只写还是读写
  • 文件清空原有内容还是追加文本信息
open函数的模式
  • r 只读打开文件,定位到文件开头 , 默认的 mode
  • r+ 读写的方式打开,定位文件开头 , 可以写入内容到文件
  • w 只能写入文件,打开文件的时候会清空文件的内容,并且不能读
  • w+ 读写文件,定位到文件头,并且打开文件的时候也会清空文件的内容
  • a 只写的方式打开文件,定位到文件的末尾,是一个追加的操作 , 但并不允许读
  • a+ 读写方式打开文件,定位到文件的末尾,追加的方式。
  • 在使用以上 mode 打开文件的时候,如果增加了b 模式,表示以二进制方式打开
with用法
  • 一般情况打开一个文件,经过操作后,都要显式的执行xx.close() 将文件关闭 .with 用于需要打开、关闭成对的操作,即,可以自动关闭打开的对象!
with open("/etc/passwd") as f2:    print f2.read()
二进制文件
  • 读取二进制文件,比如图片、视频等等,用 ‘rb’ 模式打开文件即可
>>> f = open('/root/test.jpg', 'rb')>>> f.read()
字符编码
  • 读取非 ASCII 编码的文本文件,就必须以二进制模式打开,再解码,Python 还提供了一个 codecs 模块帮我们在读文件时自动转换编码,直接读出unicode
import codecswith codecs.open('/Users/michael/gbk.txt', 'r', 'gbk') as f:f.read() 
文件的其他操作
  • f.flush()函数,将缓冲区的内容写入到硬盘中
  • f.seek(offset[,whence]),offset 表示移动多少字节, whence 为 1 的时候表示相对于当前位置移动的;当 2 的时候从文件的末尾往后移动,但不一定所有的平台都支持;默认为 0 表示从文件开头往后移动
  • f.tell()函数,返回当前文件指针的偏移量
  • fileno() 函数,返回当前的文件描述符,一个数字
  • isatty() 函数,当前打开的文件是否是一个终端设备
  • closed 属性,当前文件是否关闭 ,True,False, f.closed
  • file 对象是一个迭代器
  • next() 方法 , 一行一行的读 , 每次读取一行
文件对象可以迭代
判断可迭代的两方法
  • isinstance(f, Iterable)
  • for循环
from collections import Iterablef = open("/etc/passwd")print isinstance(f, Iterable)# 文件对象可以 for 循环遍历;for i in f:    print if.close()# for i in f.readlines:#print i
文件内置属性
# 返回 bool 值,判断文件对象的状态;print f.closed# 查看文件的打开模式print f.mode# 查看文件名print f.name
举例
  • w 模式:
    • 当以写的方式打开文件,先清空文件的所有内容
    • 只能写入文件,不能读取文件内容
    • 如果读取的文件是一个非文本文件,在原有模式上加b; eg: ‘rb’, ‘rb+’, ‘wb+’, ‘ab’, ‘ab+’
f = open("/home/kiosk/Desktop/hello",'w')f.write("westos")f.close()
  • seek
    • seek 需要传两个值;
    • 第一个参数: 偏移量 ; 偏移量 >0 , 代表向右移动的字符; 反之,向左移动的字符 ;
    • 第二个参数 : 0 : 文件开头; 1 : 代表当前位置; 2 : 文件末尾 ;
f = open("/home/kiosk/Desktop/hello",'a+')f.write("hello")f.seek(0.0)print f.tell()f.read()
  • 读文件
    • readline方法依次读取文件,仅返回一行文件信息
    • readlines方法以列表方式返回文件信息, 默认保留换行符
f = open("/etc/passwd", 'r')# 程序员常用操作:print [i.strip() for i in f.readlines()][:5]f.close()
  • 写文件
    • write
    • writeline可以写入多行文本内容
f = open("/home/kiosk/Desktop/hello",'a+')print f.read()f.writelines(["hello\n", "python\n", "java\n"])# 程序员常用操作:# help(f.writelines)f.seek(0)f.close()
应用练习1
  • 显示文件的所有行,但忽略以#开头的行
  • 处理#不在文件开头的注释
  • 思路:
    • 打开文件;
    • s.strip()[0]==”#”
    • 关闭文件
with open("/home/kiosk/Desktop/hello") as f:    for line in f:        if line.strip()[0] !=  "#":            print line ,
应用练习2
  • 把/etc/passwd文件中的”root”字符串替换为”westos”, 将更换后的另存/home/kiosk/Desktop/tmp/passwd文件
with open("/etc/passwd") as f1:    # 遍历文件的每一行内容 ;    for line in f1:        # 字符串的替换        bline = line.replace("root", "westos")        with open("/home/kiosk/Desktop/tmp/passwd", "a+") as f2:            # 写入新文件            f2.write(bline)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
第93天:文件读写
YAML文件操作
文本搜索神器Grep
【翻译】“PE文件格式”1.9版 完整译文(附注释)
Linux下使用objdump+vim+xxd进行反汇编并修改指令
C++工程实践(4):二进制兼容性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服