文件处理



f=open(‘文件’r’)         打开一个文件

f.close()                关闭文件,相当于保存


1字符编码


在文件处理过程中,首先有一个重要的概念,就是字符编码


字符编码:把人类的字符编译成计算机能认识的数字


字符编码表:就是一张字符与数字对应关系的表

ascii

gbk

utf-8          (硬盘中常用编码)

unicode       (内存中常用编码)

 

unicode ---->encode(‘utf-8’) 编码----> bytes

bytes ----> decode(‘utf-8’)解码 ----> Unicode

原则:字符以什么格式编译的,就要以什么格式解码

python3中的字符串分为两种
x='egon'              默认存为unicode
y=x.encode('utf-8')        使用encode编码为bytes

python2中字符串也分为两种
x=u'egon'              加u表示存为Unicode格式,python3的字符串一样
y='alex'               默认存为bytes

 

2、文件模式

r     文本模式的读,在文件不存在,不会创建新文件

w     文本模式的写,文件存在则清空,不存在则创建

a      文本模式的追加,文件存在光标跳到文件末尾,文件不存在创建

rb     即直接从硬盘中读取bytes

wb     以二进制写模式打开

ab     以二进制追加模式打开

r+     读的时候可写

w+     写的时候可读

a+     追加时可读写

 

a. r模式

f.read()       #一次性读取文本中全部的内容,以字符串的形式返回结果

read()的使用:

read(3)       #文件打开方式为文本模式时,代表读取3个字符

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

             #unicode格式3个字节=1个字符

 

控制光标的移动(都是以字节为单位):

f.seek()      #控制光标移动几个字节

有三种模式:

0             从首字节开始

1    b模式下运行,以当前光标所在的位置为参照物

2    b模式下运行,以最后一个字节为参照物

练习:模拟tail –faccess.log

# python3 tail.py -f access.log
import time
import sys

with open(r'%s' % sys.argv[2], 'rb') as f:
    f.seek(0, 2)

    while True:
        line = f.readline()
        if line:
            print(line.decode('utf-8'),end='')
        else:
            time.sleep(0.2)

 

truncate()    #文件的打开方式为可写,从文件开头开始截取,留下指定字节之后的字节

 

 

f.readline()       #只读取文本第一行的内容,以字符串的形式返回结果

f.readlines()        #读取文本所有内容,并且以数列的格式返回结果,一般配合for in使用

f.readble()        #判断文件是否有读的权限,返回布尔值

 

b. w模式

f.write()          #写入文件,换行需要手动写换行符\n

f.writelines()           #一次写入多行

 

c. a模式

f.tell()              #查看光标位置

 

with open(‘文件’,’w’,encoding=’utf-8’) as f:    

      f.write(‘11111\n’)     #会把文件的内容赋值给f,执行完毕会自动close

 

python中把脚本后的参数传入脚本内的方法:

import sys

print(sys.argv)

一个cp文件的python小脚本

import sys

#python3 copy.py source.file target.file
if len(sys.argv) < 3:
    print('Usage:python3 copy.py source.file target.file')
    sys.exit()

#r'C:\Users\Administrator\PycharmProjects\python18期周末班\day3\test.jpg'
with open(r'%s' %sys.argv[1],'rb') as read_f,\
        open(r'%s' %sys.argv[2],'wb') as write_f:

    for line in read_f:
        write_f.write(line)