Python基础--文件处理

文件基本概念

  • python中文件是对象
  • Linux文件:一切设备都可以看成文件,磁盘文件,管道,网络Socke,外设等
    文件属性:用户/用户组,读/写/执行权限,大小,创建时间,文件名
    -rw-rw-r–
    rw-代表当前用户权限,接下来的rw-代表当前的用户组,其它用户组
ls -l -l
chmod +x hello.py
ls -l

文件打开方式

文件打开方法:open(name[,mode[buf]])
name:文件路径
mode:打开模式/方式
buf: 缓冲buffering大小

ls
f=open("hel.py")
type(f) #file
##文件打开模式
mode        说明          注意
'r'    只读方式打开     文件必须存在
'w'    只写方式打开     不存在则创建/存在则清空文件内容
'a'    追加方式打开     不存在则创建
'r+'/'w+' 读写方式打开
'a+'    追加和读写方式打开
'rb','wb','ab','rb+','wb+','ab+' 以二进制方式打开
f=open('a.txt','w')
f.write('aaaa')
f.close()
cat a.txt
f=open('a.txt','a')
f.write('bbb')
f.close()
cat a.txt

文件读写操作

文件读取方式:

  • read([size])读取size个字节,默认读取全部
  • readline([size]):读取一行,最多读取返回max(size,len(行内容))
  • readlines([size]):读取完文件,返回每一行所组成的列表,size表示size个缓冲区长度
f=open('hello.txt',)
cat hello.txt
f.readline()
f.readline(100)
f.readline(2)
f.readlines(1)
  • iter:使用迭代器读取文件,好处是不是全部读取文件,不使用大量内存的情况下完成整个文件的读取操作,每次自动读取一行内容
f=open('hello.txt')
iter_f=iter(f)
lines=0
for line in iter_f:
    lines +=1
print lines

文件写入方式:

  • write(str):将字符串写入文件
  • writelines(sequence_of_strings):写多行到文件,参数为可迭代的对象(可以是字符串,字符串列表,字符串元组)
f=open('bb.txt','w')
f.write('bbbb')
f.close()
f=open('bb.txt','w')
f.writelines('bbbb')
f.writelines(('1','2'))
f.close()
  • 1.文件写入时先保存在文件缓冲区中时,只有在文件关闭close()和flush刷新时才会保存写到磁盘中。
f=open('bb.txt','w')
f.writelines('bbbb')
f.writelines(('1','2'))
cat bb.txt
f.flush()
cat bb.txt
f.close()
  • 2.写入数据量大于或者等于写缓存,写缓存区的内容才会同步到磁盘中。
f=open('bb.txt','w')
for i in range(10000):
    f.write('test test write'+str(i)+'\n')
ls -l bb.txt
cat bb.txt 
f.close()
ls -l bb.txt

文件的关闭

文件的关闭作用:

  • 将写缓存同步到磁盘
  • Linux系统中每个进程打开文件的个数是有限的
  • 如果打开文件数到了系统限制,再打开文件就会失败
    模拟打开文件失败的例子
ps
cat /proc/20384/
cat /proc/20384/limits #查看对该进程的限制,文件限制为
file.fileno()  #文件
for i in range(1025)
    f=open('11.txt','w')
    print "%d: %d"%(i,f.fileno())
list_f=[]
for i in range(1025)
    list_f.append(open('11.txt','w'))
    print "%d: %d"%(i,list_f[i].fileno())
    # 打开太多文件会报失败。

文件指针

文件读取写入文件指针移动过程:打开时默认在起始位置,read(3)会往后移动3个位置

seek(offset[,whence]): 移动文件指针
offset:偏移量,可以为负数
whence: 偏移相对位置,有三种方式:

  • os.SEEK_SET:相对文件起始位置
  • os.SEEK_CUR:相对文件当前位置
  • os.SEEK_END:相对文件结尾位置
#文件22.txt 内容:0123456789abcdef
f=open('22.txt','r+')
import os
f.tell() #返回当前文件的偏移
f.read(3) #012
f.tell() #3
f.seek(0,os.SEEK_SET)
f.tell() #0
f.read(3) #012
f.seek(0,os.SEEK_END)
f.tell() #16
f.read() #返回空
f.seek(-5,os.SEEK_CUR)
f.tell() #11
f.read() #
#文件的偏移大于文件的尾部时会出错:
f.seek(0,os.SEEK_END)
f.tell()
f.seek(-17,os.SEEK_CUR) #报错IOError

文件属性/文件处理

  • 文件对象属性
    file.fileno():文件描述符
    file.mode:文件打开权限
    file.encoding :文件编码格式
    file.closed:文件是否关闭

  • 标准文件:
    sys.stdin 文件标准输入
    sys.stdout 文件标准输出
    sys.stderr 文件标准错误

import sys
type(sys.stdin) #file 
sys.stdin.mode  # 'r'
sys.stdin.fileno() #0

sys.stdout.mode  # 'w'
sys.stdout.fileno() #1
sys.stderr.mode  # 'w'
sys.stderr.fileno() #2
  • 文件命令行参数:
    执行程序文件时根据参数不同完成不同功能。
    sys模块提供sys.argv属性,通过该属性可以得到命令行参数
    sys.argv : 字符串组成的列表;其中第一个参数为文件名
vi arg.py
#arg.py
if __name__=='__main__':
    print len(sys.argv)
    for arg in sys.argv:
        print arg 
  • 文件编码格式
    使用普通模式写入一个文件,写u’中文’时会报错编码格式不对时,应该将内容unicode转码为utf-8再写入文件
    a=unicode.encode(u’中文’,‘utf-8’)
    a
    如何创建一个utf-8或者其它编码格式的文件?
    使用 codecs模块提供方法创建指定编码格式文件
    codecs.open(fname,mode,encoding,errors,buffering)用指定编码格式打开文件
help(codecs.open)
f=codecs.open('12.txt','w',encoding='utf-8')

Linux文件系统简介

文件包括:磁盘(ext2,ext4)文件,NFS文件系统,各种外设(sd卡,USB设备)等;

Linux系统如何管理外设,为应用层提供统一接口?
System API
System Call --> 文件节点
虚拟文件系统
设备驱动
Kernel内核将所有外设统一封装为文件/虚拟文件系统,每个文件系统生成一个文件节点
磁盘 USB SD卡 Net …
如图:
python 操作文件流程
python 操作文件流程:
得到文件对象
打开文件,得到文件描述符
对应文件驱动
硬件设备

OS模块对文件和目录操作

os.open(filename,flag[,mode]) 打开文件
flag:打开文件方式:

  • os.O_CREAT:创建文件
  • os.O_RDONLY:只读方式打开
  • os.O_WRONLY:只写方式打开
  • os.O_RDWR:读写方式打开

os.read(filename,buffering) 读取文件
os.write(fd,string) 写入文件
os.lseek(fd,pos,how) 文件指针操作
os.close(fd):关闭文件

import os
fd=os.open('abc.txt',os.O_CREAT|os.O_RDWR)
ls -l
n= os.write(fd,'writetxt')
l=os.lseek(fd,0,os.SEEK_SET) #l值为0
str1=os.read(rd,5)
os.close(fd)

os模块介绍:如图

在这里插入图片描述

os.path模块方法介绍

在这里插入图片描述

文件练习

使用python管理ini文件:实现查询,添加,删除,保存
练习目的:
1、掌握文件基本操作
2、认识ini文件
3、了解 ConfigParser;

ini 配置文件格式:

节:[section]
参数:(键=值) name=value
例子:

#文件123.ini
[CRM]
type=9250
info=123456

import ConfigParser
cfg=ConfigParser.ConfigParser() #对象
cfg.read('123.ini')
cfg.sections()
for se in cfg.sections():
    print se
    print cfg.items(se)
cfg.set('CRM','type','321')
cfg.set('CRM','type1','222')
cfg.remove_option('CRM','type1')
import os
import os.path
import ConfigParser
class student_info(object):
    def __init__(self,recordfile):
        self.logfile = recordfile
        self.cfg = ConfigParser.ConfigParser()
    def cfg_load(self):
        self.cfg.read(self,logfile)
        
    def cfg_dump(self):
        se_list = self.cfg.sections()
        for se in se_list:
            print se
            print self.cfg.items(se)     
    def delete_item(self,section,key):
        self.cfg.remove_option(section,key) 
        
    def delete_section(self,section):
        self.cfg.remove_section(section)
        
    def add_section(self,section):
        self.cfg.add_section(section)  
        
    def set_item(self,section,key,value):
        self.cfg.set(section,key,value)   
    
    def save(self):
        fp = open(self.logfile,'w')
        self.cfg.write(fp)
        fp.close()
if __name__=='__main__':
    info = student_info('123.txt')
    info.cfg_load()
    info.cfg_dump()
    info.set_item('CRM','type','321')
    info.cfg_dump()
    info.add_section('info')
    info.set_item('info','type','321')
    info.cfg_dump()
    info.save()
    ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值