Python学习日记(十)
文件
- 文件的打开
- open(file,mode=''):file表示文件路径,mode为打开模式,注意路径的中的反斜杠要用两个防止转义
- 打开文件后返回一个文件对象
- 文件对象方法
-
- f.read()
- 参数size为空或负数时,默认读取从文件指针开始的剩余文件内容,所以第二次访问时就没有内容可以访问了
-
>>> f=open('E:\\test.txt',mode='r') >>> f.read() 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbb\nbccccccccccccccccccccccccccccccc\ndddddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeeeeeee\nfffffffffffffffffffffffffffffffffff\ngggggggggggggggg\nhhhhhhhhhhhhh\niiiiiiiiiiiiiiiiiiii\njjjjjjjjjjjj\nkkk\n' >>> f.read() '' >>> f.close() >>> f=open('E:\\test.txt',mode='r') >>> f.read(6) 'aaaaaa'
- f.tell()
- 该函数可以返回当前文件指针的位置,位置按字节算
-
>>> f=open('E:\\test.txt',mode='r') >>> f.read(6) 'aaaaaa' >>> f.tell() 6
- f.seek()
- 移动文件指针
-
>>> f.seek(10,0) 10
- 通过list(f)可以将文件对象转换为列表
-
>>> list(f) ['bbbbbbbbbbbbbbbbbbbbbbbbbbbb\n', 'bccccccccccccccccccccccccccccccc\n', 'dddddddddddddddddddddddd\n', 'eeeeeeeeeeeeeeeeeeeeeeee\n', 'fffffffffffffffffffffffffffffffffff\n', 'gggggggggggggggg\n', 'hhhhhhhhhhhhh\n', 'iiiiiiiiiiiiiiiiiiii\n', 'jjjjjjjjjjjj\n', 'kkk\n']
- 迭代读取文件内容
-
>>> f.seek(0,0) 0 >>> for each in f: print(each) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbb bccccccccccccccccccccccccccccccc dddddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeeee fffffffffffffffffffffffffffffffffff gggggggggggggggg hhhhhhhhhhhhh iiiiiiiiiiiiiiiiiiii jjjjjjjjjjjj kkk
- f.write()
- f.write(字符串),将字符串写入文件,写完后记得f.close()关闭文档
- 注意在打开时要把文件打开模式设置为可写(‘w')模式,若无此文件则会自动创建
-
>>> f=open('E:\\test.txt',mode='w') >>> f.write('i love you') 10 >>> f.seek(0,0) 0 >>> f.close() >>> f=open('E:\\test.txt',mode='r') >>> for each in f: print(each) i love you
练习:
1、文本处理,将文本中的两个人的对话分开储存,不保留发言人姓名。
-
主持人:好,谢谢大家,电视机前的观众朋友大家好,您现在正在收看的是中央电视台第二套节目经济频道的《对话》,近年来呢,在中国的版图上有这样一个区域越来越多地引起了人们的关注,尤其是在2004年中央提出了中部崛起的战略之后,无论是政府还是百姓都将关注和期待更多地集中在了中国的中部六省。今天我们的《对话》节目呢,就来到了这中部六省的中部湖北省武汉市,我们将邀请中共中央政治局委员、湖北省省委书记俞正声先生做客我们的《对话》,请他和大家来谈一谈,他心目当中崛起中的湖北和中部。好了,现在让我们用掌声请出我们今天《对话》的嘉宾,俞正声先生,有请。(掌声) 俞正声:你好。 主持人:您好,您好,谢谢您来到我们《对话》的现场,其实我想大家对您非常熟悉,我对您也非常熟悉,了解得也比较多,我知道您是浙江绍兴人对吧? 俞正声:对。 主持人:在青岛工作了八年的时间,所以您总是说青岛是自己的第二故乡,而现在湖北是自己的第三故乡,我觉得您真幸福,有这么多的故乡,有这么多的亲人,但是我很好奇,有一个问题,如果有一天您有机会再回到自己的第二故乡,或者是回到第一故乡,有家里人问您说现在在第三故乡,对湖北人有什么样的印象啊,您会怎么来告诉他们? 俞正声:湖北人他有很多长处,最大的长处是刚烈、勇敢、刚强,这是我对湖北印象最深的。 主持人:刚烈、刚强。(掌声)但是除了刚烈和刚强之外,是不是还会有那么一些些的不足,今天面对着家里人,我们让大家长俞书记大胆地来说一说,在湖北人身上是不是您也看到了一些不足? 俞正声:这个刚烈的另一方面呢,就是该柔和的时候柔和度就不够了,你比如说来个人之间有矛盾,你性情太急、太烈就容易引发冲突、就不够和谐。(掌声) 主持人:尽管您这么说了,我们听出来这掌声还是很刚烈还不太柔和,说明大家非常认可您的这份坦诚,因为面对着家里人,俞书记真的是把大家,把湖北当成了自己的家,所以说的都是肺腑之言,我们也希望今天的这个对话呢,能够延续这样的一份坦诚,让我们来看一看您的发展思路好不好?好,来掌声请俞书记入座。(掌声) 俞正声:我以前呢大概来过两次吧,一次是做技术人员的时候,时间嘛大概是1978、1979年,那一次给我印象最深的就是武汉的豆皮很好吃。(掌声)后来我来了武汉之后,我觉得豆皮也不是那么太好吃了。 主持人:吃过了那是。 俞正声:那不是,当时是恐怕各种供应比较紧张,油水比较少,现在就觉得豆皮好像一般了。 主持人:变成了一个普通的日常的食品了。 俞正声:普通的东西了,第二次来嘛是我在建设部的时候,印象最好的是一个地方就是武汉东湖的墨山那一处浮雕,虽然做得比较粗糙,但是它和周围的景观很协调。 主持人:看来呢,前几次的湖北之行每次的收获都不一样,从最初的小吃阶段到后来景观和文化的阶段,那我想现在您担任了湖北省的省委书记,看到的湖北跟当年看到的湖北又不一样了,有什么样的事是让您特别高兴的。 俞正声:我最高兴的事就是这几年农村的这种尖锐的矛盾得到了极大的缓解,我记得2002年的时候,我们搞税费改革到农村去,农民把你围住反映问题,不用你这个什么微服私访啊,不用搞这些东西。 主持人:就是问题早已浮出水面了。 俞正声:那农民一下子就把你围住了,告诉你他们搞税费改革,村镇的干部怎么怎么作假,我们负担怎么怎么重,你说这个完全怪村镇干部,也不是,它是一种体制机制形成的这么一种状况,到现在不一样了,现在到农村去问农民还有什么要求,他认为是基础设施,我们的水缺呀,没人组织了,什么方面需要村里头和乡镇,大家来协调啊,他没有讲到一个,他更多地希望政府出来工作,希望党的组织发挥作用,跟那个时候有了根本性的变化,这是这几年我最高兴的一件事情。 主持人:有没有比较过高兴的事和不高兴的事究竟哪个更多一点? 俞正声:那当然高兴的事情多,你要说不高兴的事情多,那赶紧辞职了算了。(掌声)因为这几年毕竟农村的情况有了很大的变化,县域经济有了很大的发展,经济有了很多的起飞,有很多增长点,我坐在办公室里头经常是不高兴的事多,因为看到很多群众来信,看到审计报告,审计报告它要反映问题嘛,一看到这种问题,这个心里内中的火就上来了,半夜醒来就睡不着了。 主持人:就一直在想这个事了。 text=open('E:\\interview.txt',encoding='utf-8') yu=[] host=[] for eachline in text: (role,spokenline)=eachline.split(':',1) if role =="俞正声": yu.append(spokenline) else: host.append(spokenline) y=open("E:\\y.txt",mode='w',encoding='utf-8') h=open("E:\\h.txt",mode='w',encoding='utf-8') y.writelines(yu) h.writelines(host) y.close() h.close() #课程参考案例 def save_file(boy, girl, count): file_name_boy = 'boy_' + str(count) + '.txt' file_name_girl = 'girl_' + str(count) + '.txt' boy_file = open('%s' % file_name_boy, 'w') girl_file = open('%s' % file_name_girl, 'w') boy_file.writelines(boy) girl_file.writelines(girl) boy_file.close() girl_file.close() def split_file(file_name): f = open(file_name) boy = [] girl = [] count = 1 for each_line in f: if each_line[:6] != '======': (role, line_spoken) = each_line.split(':', 1) if role == '小甲鱼': boy.append(line_spoken) if role == '小客服': girl.append(line_spoken) else: save_file(boy, girl, count) count += 1 boy = [] girl = [] save_file(boy, girl, count) f.close() split_file('33.txt')
2、编写一个程序,接受用户的输入并保存为新的文件
-
方法一: file_name=input("请输入文件名:") print("请输入内容:") text=[] s=input() while s!=':w': text.append(s) s=input() file=open(file_name,mode='w',encoding='utf-8') file.writelines(text) file.close() print("文件已保存!") file=open(file_name,mode='r',encoding='utf-8') for each in file: print(each) 方法二: def filewrite(file_name): print('请输入内容【单独输入‘:w’保存退出】:') f = open(file_name, 'w') while True: a = input() if a != ':w': f.write('%s\n' % a) # 注意这里有换行符 else: break f.close() file_name = input('请输入文件名:') filewrite(file_name)
3、编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上。
-
方法一: file=input("请输入要打开的文件:") n=int(input("请输入需要显示该文件前几行:")) f=open(file,encoding='utf-8') count=0 print("文件"+file+"前%d行的内容如下:"%n) for each in f: print(each) count=count+1 if count==n: break 方法二: def file_print(file, num): f = open(file) print('''文件%s的前%d行的内容如下:''' % (file, num)) for i in range(num): print(f.readline()) f.close() file_name = input('请输入要打开的文件(C:\\test.txt):') num = int(input('请输入需要显示该文件前几行:')) file_print(file_name, num)