知识点

一个任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:

#record.txt文件内容:

小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!
  • 小甲鱼的对话单独保存为boy_*.txt的文件(去掉小甲鱼:
  • 小客服的对话单独保存为girl_*.txt的文件(去掉小客服:
  • 文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用==========分割)
常规写法:

#!/usr/bin/python3
file1 = open('D:/record.txt')
girl = []
boy = []
count = 1
for each_line in file1:
if each_line[:6] != '======':
(role,spoken_line) = each_line.split(':',1)
if role == '小甲鱼':
boy.append(spoken_line)
if role == '小客服':
girl.append(spoken_line)
else:
file_boy_name = 'boy_' + str(count) + '.txt'
file_girl_name = 'girl_' + str(count) + '.txt' boy_file = open(file_boy_name, 'w')
girl_file = open(file_girl_name, 'w') boy_file.writelines(boy)
girl_file.writelines(girl) boy_file.close()
girl_file.close()
boy = []
girl = []
count += 1 file_boy_name = 'boy_' + str(count) + '.txt'
file_girl_name = 'girl_' + str(count) + '.txt' boy_file = open(file_boy_name, 'w')
girl_file = open(file_girl_name, 'w') boy_file.writelines(boy)
girl_file.writelines(girl) boy_file.close()
girl_file.close()
file1.close()
函数写法:

#!/usr/bin/python3
def split_file(file_name):
file1 = open(file_name)
girl = []
boy = []
count = 1
for each_line in file1:
if each_line[:6] != '======':
(role,spoken_line) = each_line.split(':',1)
if role == '小甲鱼':
boy.append(spoken_line)
if role == '小客服':
girl.append(spoken_line)
else:
write_file(boy,girl,count)
boy = []
girl = []
count += 1
write_file(boy,girl,count)
file1.close() def write_file(a,b,c):
file_boy_name = 'boy_' + str(c) + '.txt'
file_girl_name = 'girl_' + str(c) + '.txt' boy_file = open(file_boy_name, 'w')
girl_file = open(file_girl_name, 'w') boy_file.writelines(a)
girl_file.writelines(b) boy_file.close()
girl_file.close() file_name = input('请输入文件名:')
split_file(file_name)

课后习题

动动手

  • 编写一个程序,接受用户的输入并保存为新的文件,程序实现如图:

'''
从明天起,做一个幸福的人
喂马、劈柴、周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开 从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人 给每一条河每一座山取一个温暖的名字
陌生人,我也为你祝福
愿你有一个灿烂的前程
愿你有情人终成眷属
愿你在尘世获得幸福
我只愿面朝大海,春暖花开
''' def write_file(file_name):
print('请输入内容【单独输入\':w\'保存并退出】')
file1 = open(file_name,'w') while True:
write_some = input()
if write_some != ':w':
file1.write(write_some)
else:
break
file1.close()
file_name = input('请输入文件名:')
write_file(file_name)
  • 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:

def file_compare(file1,file2):
f1 = open(file1)
f2 = open(file2)
count = 0
differ = []
for line1 in f1:
line2 = f2.readline()
count += 1
if line1 != line2:
differ.append(count) f1.close()
f2.close()
return differ file1 = input('请输入文件名:')
file2 = input('请输入另一个文件名:') diff = file_compare(file1,file2) if len(diff) == 0:
print('两个完全一样!')
else:
print('两个文件共有【%d】处不同:' % len(diff))
for each in diff:
print('第%d行不一样' % each)
  • 编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上,程序实现如图:

def file_view(file_name, line_num):
print('\n文件%s的前%s的内容如下:\n' % (file_name, line_num))
f = open(file_name)
for i in range(int(line_num)):
print(f.readline(), end= '') f.close() file_name = input(r'请输入要打开的文件(C:\\test.txt):')
line_num = input('请输入需要显示该文件前几行:')
file_view(file_name, line_num)
  • 要求在上一题的基础上扩展,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)

def file_view(file_name, line_num):
if line_num.strip() == ':':
begin = '1'
end = '-1' (begin, end) = line_num.split(':') if begin == '':
begin = '1'
if end == '':
end = '-1' if begin == '1' and end == '-1':
prompt = '的全文'
elif begin == '1':
prompt = '从开始到%s' % end
elif end == '-1':
prompt = '从%s到结束' % begin
else:
prompt = '从第%s行到第%s行' % (begin, end) print('\n文件%s%s的内容如下:\n' % (file_name, prompt)) begin = int(begin) - 1
end = int(end)
lines = end - begin f = open(file_name) for i in range(begin): # 用于消耗掉begin之前的内容
f.readline() if lines < 0:
print(f.read())
else:
for j in range(lines):
print(f.readline(), end='') f.close() file_name = input(r'请输入要打开的文件(C:\\test.txt):')
line_num = input('请输入需要显示的行数【格式如 13:21 或 :21 或 21: 或 : 】:')
file_view(file_name, line_num)
  • 编写一个程序,实现“全部替换”功能,程序实现如图:


def file_replace(file_name, rep_word, new_word):
f_read = open(file_name) content = []
count = [] for eachline in f_read:
if rep_word in eachline:
count.append(eachline.count(rep_word))
eachline = eachline.replace(rep_word, new_word)
content.append(eachline) decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
% (file_name, sum(count), rep_word, rep_word, new_word)) if decide in ['YES', 'Yes', 'yes']:
f_write = open(file_name, 'w')
f_write.writelines(content)
f_write.close() f_read.close() file_name = input('请输入文件名:')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name, rep_word, new_word)

零基础入门学习Python(29)--文件:一个任务的更多相关文章

  1. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  2. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  3. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  4. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  5. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  6. 零基础入门学习Python(36)--类和对象:给大家介绍对象

    知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...

  7. 零基础入门学习Python(17)--函数:Python的乐高积木

    前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...

  8. 零基础入门学习Python(19)--函数:我的地盘听我的

    知识点 函数与过程 在许多编程语言中,函数(function)是有返回值的,过程(procedure)是简单.特殊并且没有返回值的.而在Python中,严格来说只有函数没有过程. 例如: >&g ...

  9. 零基础入门学习Python(28)--文件

    知识点 Python中使用open(...)这个内置函数来打开文件,并返回文件对象 open()函数参数说明: open(file, mode='r', buffering=-1, encoding= ...

随机推荐

  1. Ubuntu 12.04 设置终端字体为文泉驿(转载)

    转自:http://my.oschina.net/uniquejava/blog/98480 0.说明      在gnome-terminal终端中看习惯了文泉驿微米黑字体,没想到从11.10升级到 ...

  2. Spring boot下,集成任务调度中心(XXL-JOB)

    一.使用背景 目前项目中,采用的是微服务框架,由于在微服务中,存在需要定时的任务.但如果定时任务维护在每个微服务下,当微服务部署多个实例的情况下,会出现定事任务多次执行的情况.并且在解决问题的基础上, ...

  3. Windows查杀端口

    Windows环境下当某个端口被占用时,通过netstat命令进行查询pid,然后通过taskkill命令杀进程. 一.查询占用端口号的进程信息 netstat -an|findstr 二.杀掉占用端 ...

  4. android开发学习——Mina框架

    Apache Mina Server 是一个网络通信应用框架,对socket进行了封装. http://www.cnblogs.com/moonandstar08/p/5475766.html htt ...

  5. Saleae Logic添加NEC IR协议

    一.下载需要用到的代码 Git clone https://github.com/LiveOverflow/NECAnalyzer.git git clone --recursive https:// ...

  6. Java编程思想总结笔记Chapter 5

    初始化和清理是涉及安全的两个问题.本章简单的介绍“垃圾回收器”及初始化知识. 第五章  初始化与清理 目录:5.1 用构造器确保初始化5.2 方法重载5.3 默认构造器5.4 this关键字5.5 清 ...

  7. TCP/IP 协议、地址

    (一)TCP/IP 协议是端与端之间通信的基础,计算机网络,分组报文,协议是将信息正确传递的组成. 计算机网络: 由多个客户端,中间路由组成的网络体系,每个节点都一个ip进行唯一识别.路由是作为一个转 ...

  8. 在action中将字符串、对象、list集合保存到值栈中,在jsp页面中获取的方法

    转自:csdn 封装对象User,属性有id,username,email等1.1:在action中将字符串保存到值栈中   1.1.1 获取值栈对象         ValueStack stack ...

  9. 源代码管理git的使用

    Git ----本地仓库---- 1.新建一个“本地仓库” git init 2.配置仓库 ①告诉git你是谁 git config user.name syl ②告诉git怎么联系你 git con ...

  10. 洛谷 P3388 【模板】割点

    题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...