python 8 days
python 8 days
文件操作初始
文件句柄:
f1 = open('d:\护士空姐学生少妇联系方式.txt', encoding='utf-8', mode='r')
print(f1.read())
f1.close()
open python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。
windows系统默认的编码方式gbk,linux,macos:utf-8
文件操作流程:
1,打开文件,产生文件句柄。
2,对文件句柄进行相应的操作。
3,关闭文件。
"r"、"w"、"a"三大文件用法
读模式:r的五种用法
read
read(n)
readline()
readlines()
for循坏
read:
f2 = open('护士学生空姐班主任.txt', encoding='utf-8') print(f2.read()) f1.close()
r rb
1,f.read() 全部读出来。
f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f2.read())
f2.close()
read(n):
f.read(n)
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.read(3))
f1.close()
r模式:read(n) n 是按照字符读取。
rb模式:read(n) n 是按照字节读取。
readline():
readline() 按行读取
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readline())
print(f1.readline())
print(f1.readline())
print(f1.readline())
f1.close()
readlines():
readlines() 返回一个list 里面的元素是每一行。
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readlines())
for line in f1.readlines():
print(line)
f1.close()
for循坏:
for 循环去读取
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
for line in f1:
print(line)
f1.close()
rb、 r+ 、r+b的用法:
rb模式:后面不加encoding='utf-8'
rb模式 非文字类的文件
f1 = open('护士学生空姐班主任.txt',mode='rb')
print(f1.read(1))
f1.close()
r+:读写,先读后写
f1 = open('护士学生空姐班主任.txt', encoding='utf-8', mode='r+')
print(f1.read())
f1.write('666')
f1.close()
r+b读写,先读后写
f1 = open('护士学生空姐班主任.txt', mode='r+b')
print(f1.read())
f1.write('666'.encode('utf-8'))
f1.close()
写模式:W 的四种用法
W:没有文件,创建文件写内容。
W:如果有文件,清空原文件,写入新内容。
w
wb
w+
w+b
W:
f1 = open('log1', encoding='utf-8', mode='w')
# f1.write('老男孩是最好的培训学校...')
# f1.close()
# f1 = open('log1', encoding='utf-8', mode='w')
# f1.write('法国进口分类结果')
# f1.close()
wb:
f1 = open('log2', mode='wb')
# f1.write('法国进口分类结果'.encode('utf-8'))
# f1.close()
w+:先写后续
f1 = open('log1', encoding='utf-8', mode='w+')
f1.write('老老男孩.....')
f1.seek(0) # 调整光标
print(f1.read())
f1.close()
w+b:操作用法同上
追加模式:
a
ab
a+
a+b
a:
a:没有文件,创建文件写内容。
a+:有文件,直接在原文件的后面追加新内容。
f1 = open('log3', encoding='utf-8', mode='a')
f1.write('barry')
f1.close()
a+:追加可续
f1 = open('log3', encoding='utf-8', mode='a+')
f1.write('鞠先生是个大帅哥')
f1.seek(0)
print(f1.read())
f1.close()
f1 = open('log3', mode='ab')
f1.write('中国'.encode('gbk'))
f1.close()
非文字的文件的读取写入
f1 = open('11.jpg', mode='rb')
content = f1.read()
print(content)
f1.close()
f2 = open('小猪佩奇.jpg', mode='wb')
f2.write(content)
seek: 按照字节去调整光标
f1 = open('log1', encoding='utf-8')
f1.seek(3)
print(f1.read())
f1.close()
tell 告诉光标的位置
f1 = open('log1', encoding='utf-8')
print(f1.tell())
print(f1.read())
print(f1.tell())
f1.close()
truncate 对原文件进行截取内容,以字节形式,只能在a模式下使用。
f1 = open('log1', encoding='utf-8', mode='a')
f1.truncate(3)
f1.close()
文件操作的另一种写法
with open() as 不用主动关闭 f1.close()
同一open 可以操作多个文件
with open('log1', encoding='utf-8') as f1:
print(f1.read())
with open('log1', encoding='utf-8') as f1,\
open('log2',encoding='utf-8', mode='w') as f2:
print(f1.read())
f2.write('666')
with open('log1', encoding='utf-8') as f1:
content = f1.read()
f1.close()
pass
with open('log1', encoding='utf-8',mode='w') as f2:
f2.write('333')
readlable() writeable()判断是否可读或者可写
f1 = open('log1', encoding='utf-8')
print(f1.readable())
print(f1.writable())
f1 = open('log1', encoding='utf-8',mode='r+')
print(f1.readable())
print(f1.writable())
文件的改:
1,打开原文件 old_file,将原内容读取到内存。
2,创建一个新文件new_file。
3,将原内容通过你改写形成新内容,写入到新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
方法一,原文件内容不打,可以用此方法,但是此方法还是很low。
import os
with open('change', encoding='utf-8') as f1,\
open('change.bak', encoding='utf-8', mode='w') as f2:
old_content = f1.read()
new_content = old_content.replace('alex', 'SB')
f2.write(new_content)
os.remove('change')
os.rename('change.bak', 'change')
方法二
import os
with open('change', encoding='utf-8') as f1,\
open('change.bak', encoding='utf-8', mode='w') as f2:
for line in f1:
new_line = line.replace('SB', 'alex')
f2.write(new_line)
os.remove('change')
os.rename('change.bak', 'change')