第六章、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:\Script\venv\Scripts\python.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:\Script\venv\Scripts\python.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:\Script\venv\Scripts\python.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         显示出换行符的,空为默认\n不显示

六、同时打开多个文件

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

  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() 判断两个路径是否指向了同一个文件

猜你喜欢

转载自www.cnblogs.com/zhang789/p/9157251.html