Python之文件处理

任何语言都离不开对文件的操作,Python语言是如何来操作和管理文件的。今天就让我们一起去打开Python文件的世界,

Python如何操作和管理文件?

python文件概念

  1. Python中文件是对象
  2. Linux中一切设备(比如磁盘,网络socket,外设等)都可以看成文件;
    文件属性:用户、读、写、执行权限

Linux下文件和目录属性示例:
Python文件属性
ls 查看当前目录有哪些文件

cat 文件名 查看该文件的内容

ls -l查看Linux文件属性

#!/usr/bin/python 同 shell脚本 #!/bin/sh作用一样: 设置相关环境变量,调用相应脚本解析器.
有了这一行,就可以用文件名来执行文件. “./test.py”,而如果用"python test.py"执行文件,则不需要第一行.

-rw-rw-r–:第一个‘-’是文件,如果是目录应该是‘d’;第一个‘rw-’:表示当前用户有读写没有执行;第二个‘rw-’:表示当前用户组有读写没有执行;最后 r–’表示其他用户只有读权限

chmod +x hello.py给文件hello.py 添加执行权限
chmod增加权限说明

  1. chmod a+x 文件名:给所有人添加可执行权限
  2. chmod u+x 文件名:如果给文件所有者添加可执行权限
  3. chmod g+x 文件名:给所在组添加可执行权限
  4. chmod o+x 文件名:给所在组以外的人添加可执行权限

Python之文件打开方式、读写方式与关闭

文件打开方式:
open(filename,mode=‘rb’,encoding=None,errors=‘strict’,buffering=1)

filename:文件路径

mode:打开方式

encoding:编码格式 ,可设置成utf-8

r 只读方式打开(文件必须存在)

w 只写方式打开(文件不存在创建文件,文件存在则清空文件内容)

a 追加方式打开(文件不存在创建文件)

r+/w+ 读写方式打开(如有原文件,w+会清空原文件,r+不会清空)

a+ 追加和读写方式打开

rb, wb ,ab,rb+,wb+,ab+ 二进制方式打开(读取图片的信息时用)

python文件读取方式:

ead([size]) 读取文件(读取size个字节,默认读取全部)

readline([size]) 读取一行

readlines([size]) 读取buff缓存的,返回每一行所组成的列表(不推荐读取大文件)

iter 使用迭代器读取文件 iter(f)(推荐用迭代器进行读取文件,文件迭代器是一行一行迭代的)

Python文件写入方式:

write(str) 将字符串写入文件

writelines(sequence_of_strings) 写多行到文件

写入文件过程:首先是写入装在文件缓冲器中,当主动调用close方法或flush方法或者写入数据量大于等于写缓存时,写缓存同步到磁盘
写入过程

写入磁盘时机:
写磁盘时机

文件关闭的目的:
1、将写缓存同步到磁盘;

2、linux系统中每个进程打开文件的个数是有限的;

3、如果打开文件数到了系统限制,再打开文件就会失败;

for i in range(1025)
    f=open('imooc.txt','w')
    print %d:%d   %(i,f.fileno())

file.fileno()属性:文件描述符,返回一个整数,每打开一个文件,fileno就会自动加1,由于file是个局部变量,每打开一个,另一个就会自动关闭。

list_f = []
for i in rage(1025):
    list_f.append(open('imooc.txt', 'w'))
    print "%d: %d" % (i, list_f[i].fileno())  #-->too many open files

fileno属性:指文件的描述符。每打开一个文件,fileno自动加1,这里是全局变量,会一直累加到1024,打开文件将会失败。

良好的习惯:open后不使用时close

文件指针的使用:

Python文件写入和读取问题:
1、写入文件后,必须打开才能读取写入内容;
2、读取文件后,无法重新再次读取读过的内容。

python文件指针操作:
文件指针相当于指向字符之间,对于“0123456789ab"这一串字符,指针值为1的话是在”0“和”1“之间,和字符切片时下标值原理相同。

filename.seek(offset[,whence]) 其中 offset:偏移量,可以为负数;而whence:偏移相对位置;

python文件指针定位方式(偏移相对位置(whence处的值):
——需导入os模块
os.SEEK_SET 相对文件起始位置
os.SEEK_CUR 相对文件当前位置
os.SEEK_END 相对文件结尾位置

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

python标准文件(导入sys模块):
文件标准输入:sys.stdin;
文件标准输出:sys,stdout;
文件标准错误:sys.stderr;
当我们新打开一个终端,就会创建三个文件,分别是stdin,stdout,stderr.

python文件命令行参数:
使用argv获取文件命令行参数:

import sys
if __name__ == ”__main__":
    print(len(sys.argv))
    for arg in sys.argv:
        print(arg)

如何将汉字写入文件?

——将unicode转化为utf-8

python文件是ascii码格式的,不能将unicode字符串写入文件中
Unicode一个汉字占2个字节,utf-8 占3个字节 \xxx为一个字节

——创建一个utf-8或者其他编码格式的文件:使用codecs模块提供方法创建指定编码格式文件codecs.open(filename,mode,encoding,errors,buffering)
就可以直接写入u’中文’了

Linux文件系统简介:

Linux 文件系统
注意:虚拟文件系统与驱动是挂钩的方式绑定的
kenel是内核,call是调用 ,API是应用程序接口

python文件操作流程

使用os模块操作文件

os模块更加偏向于底层调用,是一个系统调用,使用这种方法会使我们的调用更加的Linux

os.open(filename,flag[,mode]) 打开文件,返回文件描述符(fd)

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

os.read(fd,buffersize) 读取文件,fd为文件描述符
os.write(fd,string) 写入文件
os.lseek(fd,pos,how) 文件指针操作
os.close(fd) 关闭文件

os模块方法介绍:
access(path,mode) path是文件名,判断该文件权限:F_OK存在,
权限:R_OK,W_OK,X_OK
listdir(path) 返回当前目录下所有文件组成的列表
remove(path) 删除文件
rename(old,new) 修改文件或者目录名
mkdir(path[,mode]) 创建目录
makedirs(path[,mode]) 创建多级目录
removedirs(path) 删除多级目录
rmdir(path) 删除目录(目录必须是空目录)

os.path 模块方法:
exists(path) 当前路径是否存在
isdir(s) 是否是一个目录
isfile(path) 是否是一个文件
getsize(filename) 返回文件大小
dirname§ 返回路径的目录
basename§ 返回路径的文件名

实例练习—运用实现Python管理文件

———Python管理ini文件:实现查询、添加、删除、保存

目的:

  1. 掌握Linux下Python对文件基本操作
  2. 认识ini(配置文件)文件
  3. 了解ConfigParser模块

ini配置文件格式:
——节 :[session]
——参数(键=值): name=value
例:

[port]
    port1=8000
    port2=8001

ini文件的查询、添加、参数(">>"表示返回结果):

import ConfigParser      #导入Configparser模块
cfg = ConfigParser.ConfigParser()      #通过ConfigParser类来创建ConfigParser的一个管理对象cfg
cfg.read('imooc.txt')      #cfg.read(self,filename) 读入一个文件  返回文件名列表
cfg.sections()      #cfg.sections(self) 返回所有的section name 组成的一个列表     
cfg.items()          #cfg.items(seif,section,raw=False,var=None)返回(name,value)元组tuple组成的列表,利用for循环可以返回section下的所有值

#查询
for se in cfg.sections():
    print se
    print cfg.items(se)
    
>>userinfo
>>[('name', 'zhangsan'), ('pwd', 'abc')]
>>study
>>[('python_base', '15'), ('python_junior', '20'), ('linux_base_', '15')]

#修改
cfg.set('userinfo','pwd','123445')      #cfg.set('section','name','value') 可以插入,修改section下的条目('name','value')

for se in cfg.sections():
    print se
    print cfg.items(se)
    
>>userinfo
>>[('name', 'zhangsan'), ('pwd', '123445')]
>>study
>>[('python_base', '15'), ('python_junior', '20'), ('linux_base_', '15')]

#添加
cfg.set('userinfo','email','user@mooc.com')

for se in cfg.sections():
    print se
    print cfg.items(se)

#删除
cfg.remove_option('userinfo','email')      #cfg.remove_option('section','key')删除section下的条目('key','value'),返回TRUE(删除成功)或FALSE

>>True

文件管理编程实例:

import os
import os.path
import ConfigParser

class student_info(object):
    def __init__(self,recordfile):  #初始化文件对象
        self.logfile = recordfile
        self.cfg = ConfigParser.ConfigParser()     #通过ConfigParser类来创建一个self的管理对象cfg
    def cfg_load(self):             #读取ini文件
        self.cfg.read(self,logfile)
    def  cfg_dump(self):      #dump(显示) ini文件的内容
        se_list = self.cfg.sections()
        print("=================>>")
        for se in se_list:
            print se
            print self.cfg.items(se)
        print("<<=================")
    def delete_item(self,section,key):    #删除条目
        self.cfg.remove_option(section,key)
    def delete_section(self,section):      #删除节
        self.cfg.remove_section(section,key)
    def add_section(self,section):       #添加节
        self.cfg.add_section(section)
    def set_item(self,section,key,value):      #设置条目
        self.set(section,key,value)
    def save(self):       #保存
        fp=open(self.logfile,"w")
        self.cfg.write(fp)      #write 方法是将 ConfigParser对象self.cfg的配置写到文件中去 
        fp.close()
        
if __name__ == "__main__":
      std1_info = student_dinfo("imooc.txt")
      std1_info.cfg.load()
      std1_info.cfg_dump()
      
      std1_info.set_item("useinfo","pwd","abc")
      std1_info.cfg_dump()
      
      std1_info.set_section("login")
      std1_info.set_item("login","2019-4-12","20")
      std1_info.cfg_dump() 
      
      std1_info.save()

Python文件处理就到这里,下回分说Python正则表达式

——————————————————————————————————————

阅读更多精彩内容,请关注微信公众号:大众学python
在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值