2 #date: 17/10/5 3 import time ,sys 4 #练习文件的操作 5 #实现三级菜单 6 #今天任务 7 8 #能调用方法的一定是对象 9 ##三种基本的操作模式 r(只可读) w(只可写) a(追加) 10 #一般步骤:创建文件对象 --->调用文件方法操作 ------>关闭文件 11 #===========读 12 #file = open(‘1‘,‘r‘,encoding = ‘utf8‘)#返回的是一个文件对象 13 #re = file.read(5) #可以指定要读几个字符 14 #file.write(‘哈哈哈哈‘) #注意这里会报错,读只能读,不能写 15 #print(re) 16 #file.close() 17 18 19 #===========写 20 # file = open(‘1‘,‘w‘,encoding = ‘utf8‘)#<class ‘_io.TextIOWrapper‘> 21 # #file.write(‘五星红旗我为你自豪‘) #首先会做一个清空的操作,然后把你要写的内容写入文件中 22 # file.read()#这里会报错,因为写只能写不能再去读 23 # file.close() 24 25 26 #如果文件没有关闭,数据会被缓存下来,不会写入磁盘中 27 # file = open(‘1‘,‘w‘,encoding=‘utf8‘) 28 # file.write(‘开心快乐每一天‘) 29 # time.sleep(30) 30 # file.close() 31 32 33 #================具体的操作方法 34 #f = open(‘1‘,‘r‘,encoding=‘utf8‘) 35 # print(f.read(2)) 36 # print(f.read(2)) #注意 :汉字在这里占一个单位(in Py3) 37 # print(f.readline()) 38 # print(f.readline()) 39 # print(f.readline())#从光标位置开始读一行,无论是read还是readline/readdlines光标的位置都会发生变化 40 # print(f.readlines())#返回一个列表,列表包含了文件的每一行内容,并且有换行符 41 # #[‘开心快乐每一天3\n‘, ‘开心快乐每一天4\n‘, ‘开心快乐每一天5\n‘, ‘开心快乐每一天6‘] 42 # f.close() 43 44 45 #=================通过循环逐行读取文件内容 46 # data = f.readlines() 47 #number = 0 48 # for i in data: 49 # number += 1 50 # if number == 5: 51 # i = ‘‘.join([i.strip(),‘handle\n‘]) 52 # print(i.strip()) 53 # f.close() 54 ##########对于大数据文件,要用以下方式(the best way): 55 # number = 0 56 # for file_content in f:#解释:这是for内部将f做成一个迭代器,用一行取一行 57 # number += 1 58 # if number == 5: 59 # file_content = ‘‘.join([file_content.strip(),‘handle\n‘])#取代万恶的+ 60 # print(file_content.strip()) 61 # f.close() 62 63 #=====基本操作 64 # print(f.tell()) #0 作用:获取当前光标所在位置 * 65 # print(f.read(2)) #开心 66 # print(f.tell()) #返回6 一个中文3个字节在utf8中 67 # print(f.read(2)) #快乐 68 # print(f.tell()) #12 69 # print(f.seek(0)) #移动光标到指定的位置 * 70 # print(f.tell()) 71 # print(f.read(2)) 72 73 74 #==========进度条的实例 75 #flush 作用把缓存里面的数据转移到磁盘上,可以用它做进度条 76 #sys.stdout 作用可以在终端上显示某个内容 77 #不加flush的时候:*并没有直接放入内存,而是放入缓冲区,暂时看不到,刷新完才能看,30个全放完结束了,一次性给用户看 78 #终端也是文件对象, 79 # 80 # for i in range(30): 81 # sys.stdout.write("*") #如果不加flush,他是一个一个把*放入缓冲中,直到全部放完,他才把他们放入磁盘中 82 # sys.stdout.flush()#进入缓冲区立刻更新,放一个更新一个,不等你全部放完 83 # time.sleep(0.2) 84 # f.close() 85 86 87 #======= 88 # f = open(‘1‘,‘w‘,encoding=‘utf8‘) 89 # #truncate() 截断数据,不能再r模式下 ,默认不加参数是从开头一直截取 90 # #在w模式下:先清空,再写,再截断 (没有意义) 91 # #在a模式下:直接将指定位置后的内容截断 92 # f.truncate(9)#如果是中文的话默认3个字节,他会把前两个字符保留,之后的内容截断 93 # f.write(‘hello world‘) 94 # f.truncate(5) 95 # f.write(‘11hello world‘) 96 # 97 # f.close() 98 99 #======r+ w+ a+ 100 #fileno 文件描述符,整数唯一 101 102 #a+ 光标默认在最后位置,开始写 103 #w+ 先清空,再写读 104 #f = open(‘1‘,‘r+‘,encoding=‘utf8‘) 105 106 #------验证r+模式 107 #r+ 光标默认在第0个位置,但是是在最后位置开始写 108 #f = open(‘1‘,‘r+‘,encoding=‘utf8‘) 109 #print(f.tell()) 110 #print(f.readline()) 111 # f.write(‘ccckk‘) 112 113 #------验证w+模式 114 #w+ 先清空,再写读 115 # f = open(‘1‘,‘w+‘,encoding=‘utf8‘) 116 # print(f.readline()) #因为先清空了,所以没有内容 117 # print(f.tell())# 0 118 # print(f.write(‘阿帕帕‘)) #开始写入 119 # print(f.tell()) #光标移动到了最后 120 # #print(f.seek(0)) #所以想看到就移动光标到开始位置 121 # print(f.readline()) #所以在读取还是没有 122 123 #------验证a+模式 124 #a+ 光标默认在最后位置,开始写 125 #f = open(‘1‘,‘a+‘,encoding=‘utf8‘) 126 #print(f.tell()) #217 127 #print(f.readline())#读不到,因为光标在最后 128 #f.write(‘ccckk‘) 129 130 131 #-----终极问题如何修改:只能采取重新创建一个文件的思路 132 #例子:将第5行最后面追加个hello 133 #方法一: 134 # f_read = open(‘1‘,‘r‘,encoding=‘utf8‘) 135 # f_write = open(‘2‘,‘w‘,encoding=‘utf8‘) 136 # num = 0; 137 # for i in f_read: 138 # num +=1 139 # if num == 5: 140 # i = ‘‘.join([i.strip(),‘hello\n‘]) 141 # f_write.write(i) 142 # f_read.close() 143 # f_write.close() 144 145 #方法二 with 方法 同时管理多个文件对象(推荐使用这种,不用我们手动关闭文件了) 146 num = 0; 147 with open(‘1‘,‘r‘,encoding=‘utf8‘) as r, open(‘2‘,‘w‘,encoding=‘utf8‘) as w : 148 for i in r: 149 num +=1 150 if num == 5: 151 i = ‘‘.join([i.strip(),‘hello_girl\n‘]) 152 w.write(i)
原文:http://www.cnblogs.com/sujunjun/p/7636046.html