文件处理

 

 

文件处理

一、文件处理流程

1.打开文件,得到句柄并赋值给一个变量

2.通过句柄对文件操作

3.关闭文件

二、基本操作流程

f=open('a.txt')
first_line=f.readline()
print('first line:',first_line)
data=f.read()
print(data)

三、文件打开模式

   打开文件时,需要指定文件以某种模式打开,打开后即可获得文件的句柄,再通过文件句柄对文件进行操作。

   文件打开有四种模式'a','r','w','b'

   'r'只读模式,默认模式。

   'w'只写模式,如果文件存在,则清空。

   'a'追加模式【可读;   不存在则创建;存在则只追加内容】

   'b'以字节表示

  

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • a+, 写读【可读,可写】

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

四、文件内光标移动

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

五、open函数详解

1.open 语法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面3
buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
newline可以取的值有None, , , ”, ‘ ',用于区分换行符,但是这个参数只对文本模式有效;
closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符

六、上下文管理

with open('a.txt','r',encoding='utf-8') as f1,
open('b.txt','w',encoding='utf-8') as f2:
     data=f1.read()
     f2.write(data)

七、文件修改

文件的修改实质上是文件的替换。

import os
with open('a.txt','r',encoding='utf-8') as read_f,
        open('.a.txt.swap','w',encoding='utf-8') as write_f:
    for line in read_f:
        if line.startswith('hello'):
            line='哈哈哈
'
        write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
原文地址:https://www.cnblogs.com/hzauq/p/7246972.html