Python 基础第8天(文件管理)
今天主要内容
文件操作相关命令
1.什么是文件操作
通过python的相关方法,对文件内的数据进行读,写,追加的操作,并且通过更改编码方式等操作方便查看内容.
方式:
f = open('路径,''编码类型','操作')
f:变量,f_obj,file,f_handler,...文件操作专有名词:文件句柄
open windows的系统功能
路径为(1)绝对路径(2)相对路径
编码类型:windows默认编码方式:gbk,linux默认编码方式utf-8 (encoding)
操作:对要打开的文件进行操作,打开文件,生成文件句柄,然后对文件句柄进行操作,mode = ''
执行动作(打开方式):只读,只写,追加,读写,写读....
例:
f = open('F:\练习1.txt',encoding='gbk',mode='r')
jd = f.read()
print(jd)
f.close()
读
mode = 'r', 'rb', 'r+', 'r+b'
五种只读的方式:
f = open('F:\练习1.txt',encoding='gbk',mode='r')
jd = f.read()
print(jd)
f.close()
f.read() :全部读到内存中
f = open('F:\练习1.txt',encoding='gbk',mode='r')
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
f.readline():根据文件内的换行符,一行一行读出来
f = open('F:\练习1.txt',encoding='gbk',mode='r')
print(f.readlines())
f.close()
f.readlines():将原文件的每一行作为一个列表元素,放到list中
f = open('F:\练习1.txt',encoding='gbk',mode='r')
print(f.read(4))
f.close()
f = open('F:\练习1.txt',encoding='gbk',mode='rb')
print(f.read(4))
f.close()
f.read(n):读取一部分
# 在r模式下,read(n)按照字符去读取。
# 在rb模式下,read(n)按照字节去读取。
f = open('log',encoding='utf-8')
for i in f:
print(i.strip())
f.close()
5.循环读取数据,
即将文件句柄f看做是一个可迭代的对象,使用for进行循环内部是元素.文件内部以换行符进行行的分割.
=========================================================
(1)r,只读。
#文件以什么编码方式存储的,就以什么编码方式打开。
(2)rb,只读,以bytes类型读取。
#非文字类的文件时,用rb,省略encoding类型
(3)r+ 先读,后追加 一定要先读后写,否则程序出错
错误的操作:
(4) r+b :用bytes形式,对文件进行先读后写的操作
例:
写操作:
(1)w :没有文件,创建一个文件写入内容,有文件,将原文件内容清空,在写入内容
(2)wb:用法与rb相似
(3)w+ 先写后读。
(4)w+b 用bytes方式对文件进行先写后读操作
追加
(1)a 没有文件,创建一个文件追加内容,有文件,直接追加内容
(2)ab 以bytes方式对文件进行追加操作
(3)a+ 追加读,先写入文件,然后在读出来
(4)a+b bytes形式的a+ 追加读,先写入文件,然后在读出来
其他用法:
f.writable #是否可写
f.truncate() #按字节对源文件进行截取,如果不填字节数,则显示文件内总共在设置的编码下有多少字节.
例: 根据截取添加内容,使用truncate方法,后面输入字节数,在这个字节数后面添加新内容.
f.tell() 按字节去读光标位置,当前光标所在位置为末尾.()内容为字节数.
f.seek() 按照字节调整光标位置,显示后面还能符合字符标准的字符显示出来
f.readable() 检查是否可读
with语句:
**with open() as f:
print(f.read())
功能: 1.自动关闭文件句柄 2.一次性可以操作多个文件句柄
此例题展示了如何进行系统中的文件修改.
例1
import os
with open('log',encoding='utf-8') as f1,\
open('log.bak',encoding='utf-8',mode='w') as f2:
content = f1.read()
new_content = content.replace('alex','SB')
f2.write(new_content)
os.remove('log')
os.rename('log.bak','log')
例2:
import os
with open('log',encoding='utf-8') as f1,\
open('log.bak',encoding='utf-8',mode='w') as f2:
for i in f1:
new_i = i.replace('SB','alex')
f2.write(new_i)
os.remove('log')
os.rename('log.bak','log')