任何语言都离不开对文件的操作,Python语言是如何来操作和管理文件的。今天就让我们一起去打开Python文件的世界,
Python如何操作和管理文件?
python文件概念
- Python中文件是对象
- Linux中一切设备(比如磁盘,网络socket,外设等)都可以看成文件;
文件属性:用户、读、写、执行权限
Linux下文件和目录属性示例:
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增加权限说明
- chmod a+x 文件名:给所有人添加可执行权限
- chmod u+x 文件名:如果给文件所有者添加可执行权限
- chmod g+x 文件名:给所在组添加可执行权限
- 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文件系统简介:
注意:虚拟文件系统与驱动是挂钩的方式绑定的
kenel是内核,call是调用 ,API是应用程序接口
使用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文件:实现查询、添加、删除、保存
目的:
- 掌握Linux下Python对文件基本操作
- 认识ini(配置文件)文件
- 了解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