1,文件操做python
1.1,文件路径:
1.2,编码方式:utf-8 gbk。。。
1.3,操做方式:只读,只写,追加,读写,写读。。。
1.4,以什么编码的方式储存的文件,就以什么编码打开进行操做
1.5,bytes类型指字节型字符串utf-8,gbk,ascii等,Unicode是字符串型
2,文件只读(r模式)
2.1,绝对路径
f = open('D:\PycharmProjects\S9\Class\day008\文件操做练习',mode='r',encoding='utf-8')
content = f.read() #文件内容:文件操做
print(content) #>>> 文件操做
f.close()
对于绝对路径,由于 \ 在程序中有转义的做用,有时会出现转义的状况(例:\t)因此要使用 \\ (例:\\t)以取消转义的做用
2.2,相对路径
f = open('文件操做练习',mode='r',encoding='utf-8')
content = f.read() #文件内容:文件操做
print(content) #>>> 文件操做
f.close()
3,文件只读(rb模式,即只读,bytes类型)(各类操做模式均可加小写b,变成对应的bytes类型的模式)
f = open('文件操做练习',mode='rb') #文件内容:文件操做
content = f.read()
print(content) #>>>b'\xe6\x96\x87\xe4\xbb\xb6\xe6\x93\x8d\xe4\xbd\x9c'
f.close()
4,文件只写(w模式)
f = open('文件操做练习',mode='w',encoding='utf-8') #文件内容:文件操做
f.write('写入的内容') #文件内容:写入的内容
f.close()
5,文件只写(wb模式)
f = open('文件操做练习',mode='wb') #文件内容:文件操做
f.write('写入的内容wb'.encode('utf-8')) #文件内容:写入的内容wb
f.close()
6,文件追加(a模式)(在原内容后添加新内容)
f = open('文件操做练习',mode='a',encoding='utf-8') #文件内容:文件操做
f.write('追加内容') #文件内容:文件操做追加内容
f.close()
7,文件追加(ab模式)
f = open('文件操做练习',mode='ab') #文件内容:文件操做
f.write('追加ab'.encode('utf-8')) #文件内容:文件操做追加ab
f.close()
8,文件读写(r+模式)
8.1,先读取原内容,再将新内容添加到原内容以后
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
print(f.read()) #>>>文件操做
f.write('读写模式') #文件内容:文件操做读写模式
f.close()
8.2,先写后读不行
r+模式下先写后读,新内容会将原内容从头开始依次覆盖,然会再将剩余的原内容读出
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
f.write('读写') #文件内容:读写操做
print(f.read()) #>>>操做
f.close()
9,文件读写(r+b模式)
f = open('文件操做练习',mode='r+b') #文件内容:文件操做
print(f.read()) #>>>b'\xe8\xaf\xbb\xe5\x86\x99\xe6\x93\x8d\xe4\xbd\x9c'
f.write('文件读写r+b模式'.encode('utf-8')) #文件内容:文件操做文件读写r+b模式
f.close()
10,文件写读(w+模式)
f = open('文件操做练习',mode='w+',encoding='utf-8') #文件内容:文件操做
f.write('写读模式') #文件内容:写读模式 #写入会将原文件删除再写入
f.seek(0) #由于写完后光标是在内容后,因此将光标调至前面
print(f.read()) #>>>写读模式
f.close()
11,追加且可读模式(a+模式)
f = open('文件操做练习',mode='a+',encoding='utf-8') #文件内容:文件操做
f.write('a+模式') #文件内容:文件操做a+模式
f.seek(0)
print(f.read()) #>>>文件操做a+模式
f.close()
12,读操做详解
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
content = f.read(3) #读操做能够设定从光标位置读几个字符
print(content) #>>>文件操
f.close()
13,seek() 按照字节定位光标的位置
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
f.seek(3) #utf-8编码的汉字是3字节,因此光标在‘文’的后面, #此时不是3的倍数时会报错或乱码
content = f.read()
print(content) #>>>件操做
f.close()
14,f.tell() 告诉你光标的位置
能够再用seek()进行追加,可用此方法进行断点续接
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
print(f.tell()) #>>>0
f.close()
f = open('文件操做练习',mode='a+',encoding='utf-8') #文件内容:文件操做
f.write('举例') #文件内容:文件操做举例
count = f.tell()
f.seek(count-9)
print(f.read(2)) >>>做举
f.close()
15,文件按行读
f = open('文件操做练习',mode='r+',encoding='utf-8')
line = f.readline() #每次只读取一行 #内存中只有一行
print(line) #>>>文件操做
line = f.readline()
print(line) #>>>一行
f.close()
f = open('文件操做练习',mode='r+',encoding='utf-8')
line = f.readlines() #每一行当成列表中的一个元素,添加到list中 #仍是全读,将全部读到内存中
print(line) #>>>['文件操做\n', '二行\n', '三行']
f.close()
f = open('文件操做练习',mode='r+',encoding='utf-8')
for line in f: #一行一行的读
print(line)
f.close()
16,文件是否可读
f = open('文件操做练习',mode='r+',encoding='utf-8')
print(f.readable()) #>>>True
f.close()
17,截取内容
f = open('文件操做练习',mode='r+',encoding='utf-8') #文件内容:文件操做
f.truncate(6) #参数是字节长度 #文件内容:文件
f.close()
18,用with方法打开编程
with open('文件操做练习',mode='r',encoding='utf-8') as name,\
open('文件操做练习',mode='w',encoding='utf-8') as name2: #文件内容:文件操做
name2.write('name2') #文件内容:name2
19,修改文件
文件事实上是不能修改的,所以修改文件的思路:
将原文件内容一行一行的读取到内存,查看是否修改,在内存中作修改,
而后建立一个新的文件,并将内容写入,而后将源文件删除,将新文件从新命名
open()的模式默认是'r'
with open('小护士',encoding='utf-8') as f,\
open('新小护士',mode='w',encoding='utf-8') as f2: #打开两个文件
for line in f: #一行一行的读到内存,内存中只有一行
if '星儿' in line:
line = line.replace('星儿','阿娇') #将须要修改的修改
f2.write(line)
20,删除,重命名文件
import os
os.remove('小护士') #删除‘小护士’文件
os.rename('新小护士','小护士') #重命名文件,将‘新小护士’重命名‘小护士’