#!/usr/bin/env python
# -*- encoding:utf-8 -*-
#创建文件句柄
#方式1,必须做关闭文件的操作
f1=open('a.txt',encoding='utf-8',mode='r')#r模式要求文件已经存在
print(f1.read())
f1.close()
#方式2,自动关闭文件句柄
with open('a.txt',encoding='utf-8') as f2:
content=f2.read()
print(content)
#同时建两个文件句柄:
with open('a.txt', encoding='utf-8') as f1,\
open('c', encoding='utf-8', mode='w')as f2:
print(f1.read())
f2.write('777')
#文件句柄需要元素:
1. 文件路径(绝对路径或者相对路径),若是路径中包含歧义的字符,比如n,需要在路径前加r,
f1=open(r'a.txt',encoding='utf-8')
2.字符编码
windows默认的编码是‘gbk’,如果是对系统创建的文件编辑的话,需要encoding='gbk'如果是pycharm创建的文件,格式默认为‘utf-8’
3. 文件句柄模式 mode,默认为‘r’,只读,也可以指定
#模式,r:只读模式,不输入模式的时候,默认为r
#可做的操作read(),readline(),readlines()
f1=open('a.txt',encoding='utf-8',mode='r')#r模式要求文件已经存在
print(f1.read())#读取全文
print(f1.read(5))#按照字符读取
print(f1.readline())#按行读取
print(f1.read())#从当前光标开始,读取全文末尾
f1.seek(0,2)#光标放到末尾
print(f1.readlines())#从光标开始到文章末尾,将每一行作为列表的一个元素并返回这个列表
print(f1.readable())#该文件句柄是否可读
f1.close()
#for循环读取数据,不占用内存空间
f1=open('a.txt',encoding='utf-8',mode='r')
for line in f1:
print(line)
f1.close()
#rb模式,按照字节读取
f1=open('a.txt',mode='rb')
print(f1.read())#按照字节读取
f1.close()
# #r+ 模式:读写模式,只能先读后写,不然会出问题
f1=open('a.txt','r+',encoding='utf-8')
print(f1.read())
f1.write('测试哦')###如果先写后读,字符是按照字节单位去覆盖。utf-8中,三个字节是一个中文字符,中文跟英文混合的时候容易报错
# print(f1.read())
f1.close()
#r+模式,先写后读模拟
f1=open('a.txt','r+',encoding='utf-8')
f1.seek(0,2)#末尾
f1.write('测试哦')
f1.seek(0) #首位,光标 按照字节去运转 seek
print(f1.read())
f1.close()
#模式w:只写
#可做的操作write() 1.会将文件中内容清空2. 再写入新内容
f1=open('a.txt',encoding='utf-8',mode='w')#w模式文件不存在则创建,不可读,只能写
print(f1.tell())
f1.write('努力奋斗,才会幸福123')
print(f1.tell())
f1.write('你相信吗')
print(f1.tell())
f1.close()
#wb:写二进制文件
# with open('a.txt','wb') as f1:
# f1.write(b'sdfhdlgal')
#a模式句柄,是将光标放到末尾,开始执行写操作
f1=open('a.txt',encoding='utf-8',mode='w')#w模式文件不存在则创建,不可读,只能写
print(f1.tell())
f1.write('努力奋斗,才会幸福123')
print(f1.tell())
f1.write('你相信吗')
print(f1.tell())
f1.close()
#ab 以字节的形式追加
#a+ 追加跟读操作
#模拟一个文本编辑器修改文件的真实操作
#1,打开原文件,产生文件句柄。
#2,创建新文件,产生文件句柄。
#3,读取原文件,进行修改,写入新文件。
#4,将原文件删除。(文件句柄需要先关闭才能删除,所以这里的文件句柄用with open方式打开更好)
#5,新文件重命名原文件。
import os
with open('a.txt',encoding='utf-8')as f1,\
open('d',encoding='utf-8',mode='w')as f2:
for line in f1:
content=line.replace('是','is')
f2.write(content)
os.remove('a.txt')
os.renames('d','a')