第六章Python文件操作

Posted zhang789

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章Python文件操作相关的知识,希望对你有一定的参考价值。

第六章、Python文件操作

Python可以对文件进行查看、创建等功能,可以对文件内容进行添加、修改、删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持fileopen,但是在3.5.x系列移除了file函数。

一、Python文件打开方式

  
  文件句柄 = open(文件路径,打开模式)
  Nginx_Conf = open(nginx.conf,r,encoding=utf-8)

Ps:文件句柄相当于于变量名,文件路径可以写为绝对路径也可以写为相对路径。

二、Python打开文件的模式

基本的模式

模式说明注意事项
r 只读模式 文件必须存在
w 只写模式 文件不存在则创建文件,文件存在则清空文件内容
x 只写模式 文件不可读,文件不存在则创建,存在则报错
a 追加模式 文件不存在创建文件,文件存在则在文件末尾添加内容

+的模式

模式说明
r+ 读写
w+ 写读
x+ 写读
a+ 写读

b的模式

模式说明
rb 二进制读模式
wb 二进制写模式
xb 二进制只写模式
ab 二进制追加模式

提示:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

+b的模式

模式说明
rb+ 二进制读写模式
wb+ 二进制读写模式
xb+ 二进制只写模式
ab+ 二进制读写模式

三、Python文件读取方式

模式说明
read([size]) 读取文件全部内容,如果设置了size,那么久读取size字节
readline([size]) 一行一行的读取
readlines() 读取到的每一行内容作为列表中的一个元素

测试的文件名是"www.baidu.com.conf",文件内容为:

  server {
    listen 80;    //80端口
    server_name www.baidu.com;     //设置域名
  ?
    location / {
      index index.html;
      root /usr/htdocs/linux; //直接输入linux.com是进到了这里 ,一般配置和解析php所在目录一直
    }
  ?
    location ~ .php$ {
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name;   //当前虚拟主机对应的目录
      include fastcgi_params;
    }
  }

read

代码:

  # 以只读的方式打开文件www.baidu.com.conf
  f = open("www.baidu.com.conf","r")
  # 读取文件内容赋值给变量c
  c = f.read()
  # 关闭文件
  f.close()
  # 输出c的值
  print(c)

输出结果:

 D:ScriptvenvScriptspython.exe D:/python-new/Python练习/Python文件管理/file_op.py
  server {
    listen 80;    //80端口
    server_name linux.com;     //设置域名
  ?
    location / {
      index index.html;
      root /usr/htdocs/linux; //直接输入linux.com是进到了这里 ,一般配置和解析php所在目录一直
    }
  ?
    location ~ .php$ {
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name;   //当前虚拟主机对应的目录
      include fastcgi_params;
    }
  }

readline

代码:

  #!/usr/bin/env python
  # ~*~ coding: utf-8 ~*~
  __author__ = "Zhang.H"
  ?
  Nginx_Conf = open("www.baidu.com.conf","r",encoding="utf-8")    # # 以只读模式打开文件
  print(Nginx_Conf.readline())    # 读取第一行
  print(Nginx_Conf.readline())    # 读取第二行
  print(Nginx_Conf.readline())    # 读取第三行
  Nginx_Conf.close()  # 关闭文件

输出结果:

  D:ScriptvenvScriptspython.exe D:/python-new/Python练习/Python文件管理/file_op.py
  server {
  ?
    listen 80;    //80端口
  ?
    server_name www.baidu.com;     //设置域名

readlines

  #!/usr/bin/env python
  # ~*~ coding: utf-8 ~*~
  __author__ = "Zhang.H"
  ?
  Nginx_Conf = open("www.baidu.com.conf","r",encoding="utf-8")   # 以只读的方式打开文件,将文件所有内容赋值给Nginx_Conf
  for i in Nginx_Conf.readlines():    # 遍历输出文件内容
      print(i)

结果

    D:ScriptvenvScriptspython.exe D:/python-new/Python练习/Python文件管理/file_op.py
  server {
  ?
    listen 80;    //80端口
  ?
    server_name www.baidu.com;     //设置域名
  ?
  ?
  ?
    location / {
  ?
      index index.html;
  ?
      root /usr/htdocs/linux; //直接输入linux.com是进到了这里 ,一般配置和解析php所在目录一直
  ?
    }
  ?
  ?
  ?
    location ~ .php$ {
  ?
      fastcgi_pass 127.0.0.1:9000;
  ?
      fastcgi_index index.php;
  ?
      fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name;   //当前虚拟主机对应的目录
  ?
      include fastcgi_params;
  ?
    }
  ?
  }

四、Python文件写入方式

方法说明
write(str) 将字符串写入文件
writelines(sequence or strings) 写多行到文件,参数可以是一个可迭代的对象,列表、元组等

write

代码:

  #!/usr/bin/env python
  # ~*~ coding: utf-8 ~*~
  __author__ = "Zhang.H"
  ?
  Nginx_Conf = open("www.baidu.com.conf","w",encoding="utf-8")    # 以写的模式打开文件write.txt,没有则创建,有则覆盖内容
  Nginx_Conf.write("Nginx_Config")    # 在文件内容中写入字符串
  Nginx_Conf.close()  # 关闭文件

www.baidu.com.conf文件内容为:

  Nginx_Config

writelines

代码:

  #!/usr/bin/env python
  # ~*~ coding: utf-8 ~*~
  __author__ = "Zhang.H"
  ?
  Mysql_conf = open("mysql.conf","w",encoding="utf-8") # 以只写模式打开一个不存在的文件mysql.conf
  Mysql_conf.writelines(["11","22","33"]) # 写入一个列表
  Mysql_conf.close()  # 关闭文件

mysql.conf文件内容:

  112233

五、Python文件操作所提供的方法

  
  f.close()        关闭文件
  f.fileno()      返回文件描述符
  f.readline()     从当前指针读取一行
  f.readlines()    从当前指针读取到结尾的全部行
  f.read()         从当前指针读多少个字节,没有参数读取全部
  f.tell()         告诉当前指针,是字节
  f.seek(offset [whence])    移动指针,f.seek(0)把指针移动第一行第0个字节位置
      offset: 偏移量
      whence: 位置
          0: 从文件头
          1:从当前位置
          2:从文件尾部
      
  f.write(string)    打开文件时,文件不存在,r,r+都会报错,其他模式则不会
  f.writelines()     必须是字符串序列,把字符串序列当作一个列表写进文件
  f.flush()          在文件没有关闭时,可以将内存中的数据刷写至磁盘
  f.truncate()       文件截取多少字节保留,指针后面的内容全部会清空
  ?
  f.name             是返回文件名字,不是方法,是属性    
  f.closed           判断文件是否已经关闭
  f.encoding         查看编码格式,没有使用任何编码,则为None
  f.mode             打开文件的模式
  f.newlines         显示出换行符的,空为默认
不显示

六、同时打开多个文件

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

  with open(log,r) as f:
   代码块

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:

  with open(log1) as obj1, open(log2) as obj2:
      pass

七、文件系统功能

  import os
  • 目录相关:

  os.getcwd() 返回当前工作目录
  os.chdir() 切换目录
  os.chroot() 设定当前进程的根目录
  os.listdir() 列出指定目录下的所有文件名
  os.mkdir() 创建指定目录
  os.makedirs() 创建多级目录
  os.rmdir() 删除陌路
  os.removedirs() 删除多级目录
  • 文件相关:

  os.mkfifo() 创建管道文件
  os.mknod() 创建设备文件
  os.remove() 删除文件
  os.rename() 文件重命名
  os.stat() 查看文件的状态属性
  os.symlink() 创建链接文件
  os.unlink() 删除链接文件  
  os.utime() 更新文件时间戳
  os.tmpfile() 创建并打开(w+b)一个新的
  os.walk() 生成目录结构的生成器
  • 访问权限:

  os.access() 检验文件某个用户是否有访问权限
  os.chmod() 修改权限
  os.chown() 修改属主属组
  os.umask() 设置默认权限模式
  • 文件描述符:

  os.open() 根据文件描述打开
  os.read() 根据文件描述读
  os.write() 根据文件描述符写
  • 创建设备:

  os.mkdev() 创建设备文件
  os.major() 获取设备主版本号
  os.minor() 获取设备次版本号
  • 用户相关:

  os.getuid() 获取当前用户的uid
  os.getgid() 获取当前用户的gid
  • 文件路径:

  os.path.basename() 路径基名
  os.path.dirname() 路径目录名
  os.path.join() 将dirname()和basename()连接起来
  os.path.split() 返回dirname(),basename()元组
  os.path.splitext() 返回(filename,extension)元组
  os.path.getatime()
  os.path.getctime()
  os.path.getmtime()
  os.path.getsize() 返回文件的大小
  os.path.exists() 判断指定文件是否存在
  os.path.isabs() 判断指定的路径是否为绝对路径
  os.path.isdir() 判断是否为目录
  os.path.isfile() 判断是否为文件
  os.path.islink() 判断是否为链接文件
  os.path.ismount() 判断是否为挂载点
  os.path.samefile() 判断两个路径是否指向了同一个文件

 

以上是关于第六章Python文件操作的主要内容,如果未能解决你的问题,请参考以下文章

第六章.解决大问题

Python核心编程(第二版)第六章部分习题代码

Python 编程快速上手 第六章总结

《Python从入门到实践》--第六章 操作字典 课后练习

第六章:Python基础の反射与常用模块解密

阅读笔记《C程序员 从校园到职场》第六章 常用文件操作函数 (Part 1)