Python文件操作

文件操作

  1.文件路径:例如:d:******(绝对路径);'文件名'(相对路径在同文件夹下直接打开)
  2.编码方式:例如:utf-8,gbk.....
  3.操作方式:例如:只读,只写,追加,读写,写读.....
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True);#open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写

打开文件简单三部:(只读)
  1.'对象(例如f)'=open('文件路径',mode='',encoding=''(二进制写入或读放到操作中))#'对象及变量'
  2.'变量(例如k)'=f.read();
  3.print('k'),f.close()。

高级打开:

  with open('文件路径',mode='',encoding='')#'对象及变量'as'对象'(可以多开不需要手动关闭):

Ps:

如果要读原文件使用 for i in 循环读

补充 with 其他:

  with obj对象
  __enter__(self) # 实际是走对象中的 __enter__方法 进入后
  执行 with obj: 后其他内容
  __exit__(self,exc_type,exc_val,exc_tb) # 最后走__exit__退出


 

模式详解

模式       描述
r        ***以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb        ***以二进制格式(bytes)打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

r+        ***打开一个文件用于读写。文件指针将会放在文件的开头。

rb+         ***以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

w         ***打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb       ***以二进制格式(bytes)打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。(f.write('内容').encode('你写文件的编码方式')只有在二进制mode下需要写,open中不需要写encoding)

w+       ***打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+       以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

a        ***打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab        ***以二进制格式(bytes)打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+       打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+       以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 


属性详解

属性(这里的file值得是句柄)         描述
file.closed                返回true如果文件已被关闭,否则返回false。

file.mode                  返回被打开文件的访问模式。

file.name                  返回文件的名称。

file.softspace                如果用print输出后,必须跟一个空格符,则返回false。否则返回true;

*****file.seek()               ********调光标;是按照字节去定光标的位置(可以选择光标字节);
# seek(0,0) 开头 seek(0,1) 当前位置 seek(0,2) 移动到末尾 # 0索引代表移动位置,1索引代表行状态

*****file.read()              ********读文件内容,读出来的都是字符;(可以选择阅读符);****"一次性读*"

*****file.readable()            ********判断文件是否可读;

*****file.readline()             ********一行一行读;*****"不知道在哪结束;bytes按照字节读没有行的概念"

*****file.readlines()             ********每一行当成列表中的一个元素,然后添加到list中,可以使用循环打印出来;****"一次性读*"

*****file.write()               ********写文件;

*****file.writeable()             ********判断文件是否可写;

******for循环读              ********for i in file()

*****file.truncate()             ********用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除.

*****file.tell()                 ********查找到光标目前的位置;

*****file.close()             ********关闭文件;

*****file.flush()             ********强制保存;


补充: 关于修改文件的方法


  读一个,写一个,删除,重命名(两个文件替换)
  import os
  os.remove('文件名') 删除文件
  os.rename('文件名','新文件名') 重命名文件


深浅拷贝

  " = " 栈空间的内存地址的赋值
  浅拷贝: 只拷贝第一层内容
  # 一定会创建一个对象,内部构造和原来的对象一模一样,原来的对象中的内存指向和新对象的指向是一致的

  深拷贝: 全部复制一份
  # 一定会创建一个对象,内部构造和原来的一样,但是地址的指向不一样