#!/usr/bin/evn python
# -*- coding:utf-8 -*-
# Author:Li ShiLin
# python对文件的简单基本操作 放在上面并不是想展示自己有牛叉 只想我有错误的地方希望有朋友能告诉我 及时的去改正
import sys,time
# 文件操作 (读和写需要分开 不然会报错 )
# 打开文件 文件名称 模式 字符编码 r代表读 w代表写 a代表追加 r+代表又可以读又可以写 w+写读模式 rb读取二进制文件
# 这是几个不通的模式 单独写
# f = open("yesterday",'r',encoding='utf-8')
#将文件里面的内容读取出来
# data = f.read()
# print(data)
# 关闭文件
# f.close()
# 写入文件(写入文件相当于创建一个新的文件 把内容重新写进去 如果打开的文件里面有内容 那么文件里面的内容将会被新写入的文件覆盖)
# w = open('yesterdayTwo','w',encoding='utf-8')
# w.write("这是一个月黑风高的夜晚,\n 那个无人的夜晚独自流落街头")
# 写入文件第三中模式追加 a(这个模式在不覆盖源文件的情况下在文段最后将你要写入的内容添加 但是这三种模式都不能同时进行读写一起操作
# 要么读 要么写 要么追加 不能同时使用)
# w1 = open('yesterdayTwo','a',encoding='utf-8')
# w1.write("And so much pain OK, I heat you too")
#
# w1.close()
# 读文件指定读文件的多少行 for 循环读取文件中的前五行readline()方法单独读出多少行
# f_1 = open('yesterday','r',encoding='utf-8')
# for i in range(5):
# print(f_1.readline())
# 第二种循环读出的方法
# strip()去除所有空格和换行
# for line in f_1.readlines():
# print(line.strip())
# 高效率的循环方法 (计算机在做循环的时候会将循环的内容先全部读到内存中 这样的方法会让内存占用太高导致服务器爆死)
# 加入需要对哪一行进行特殊的处理 那么就加上一个计数器 判断
# count = 0
# for lines in f_1 :
# if count == 5 :
# print("-----需要特殊处理的字段-----")
# count += 1
# continue
# print(lines.strip())
# count += 1
# 当文件李的内容需要再一次读取的时候 将读取的光标移动回去 seek()方法
# 查看读取文件时的光标在哪里tell()方法(这个方法计算光标是以字符个数来进行计算的)
f_1 = open('yesterday','a',encoding='utf-8')
# 打印单行
# print(f_1.readline())
# print(f_1.readline())
# print(f_1.readline())
# 查看当前光标所处的位置
# print(f_1.tell())
# 回到指定的光标位置 可以指定 比如f_1.seek(10) 会跳过前面的内容直接打印第10行的数据
# f_1.seek(10)
# print(f_1.readline())
# 查看当前的字符集编码
# print(f_1.encoding)
# 打印出文件的名字 name
# print(f_1.name)
# 实时刷新
# print(f_1.flush())
# 例举一个简单的实例 模拟进度条 但是需要导入两个包 sys 和time
# for i in range(30):
# 将内容打印到屏幕上
# sys.stdout.write("#")
#进行实时的刷新作用 看到符号一个一个的出现 (如果没有实时刷新 程序会运行玩了以后再将符号全部打印出来)
# sys.stdout.flush()
# 控制时间(应该算是控制速度吧 1秒钟出现一个符号)
# time.sleep(1)
# 判断一个文件是否关闭了 closed() 关闭了True 反之False
# print(f_1.closed)
# 将文件的内容截断 需要注意的时如果这个函数里面需要填写截断到哪里 以字符来计算(是从开头到结尾这样截取 还有读取的模式是可以修改模式 a
# 其他模式会报错)
# print(f_1.truncate(200))
# 这个文件操作的第四种方法 读写可以往文件李加入内容 但是这个模式的确定是 写入文件的内容永远加在内容的最后面 不管写的时候光标在哪里
# 写入进去的内容都在最后面
# f_3 = open("yesterday","r+",encoding="utf-8")
# print(f_3.readline())
# print(f_3.readline())
# print(f_3.readline())
# f_3.write("===========你好的 你大爷的=======")
# print(f_3.readline())
# 还有一个写读的模式 w+ 写读模式一般没有多大的作用 文件的修改再python中都是一样的 不管什么怎么写永远是将新增的内容加在
# 最后面 除非修改的东西 改成大写的或者什么 其他的修改 会覆盖掉原本有得内容
# f_4 = open("yesterday","w+",encoding="utf-8")
# f_4.write("===========你好的 你大爷的==============\n")
# f_4.write("===========你好的 你大爷的==============\n")
# f_4.write("===========你好的 你大爷的==============\n")
# f_4.write("===========你好的 你大爷的==============\n")
# print(f_4.tell())
# f_4.seek(10)
# print(f_4.readline())
# f_4.write("OK,I know you are reading zhe book\n")
# rb文件模式(读取二进制文件得方法 比如视频 音乐 都是二进制文件 所以可以用这种模式来用)后面不用加字符集编码 加了反而会报错
# f_5 = open("yesterday","rb")
#读取
# print(f_5.readline())
# f_5.close()
# wb文件模式(写入二进制文件的方法 )
f_6 = open("yesterday","wb")
# 写入的方法还是一样的 但是你写入的文件是字符串 所以 单单使用这种方法的话 会报错 将写入的内容改为二进制
f_6.write("this is my frinds Tom".encode())
f_6.close()