【Python029--一个任务】
一、文件编写
任务:将文件(record.txt)中的数据进行分割,并按照以下规律保存起来:
--小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
--小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
--文件中总共有三端对话,分别保存为boy_1.txt,girl_1.txt,boy_1.txt,boy_3.txt,girl_2.txt,girl_3.txt工6个文件,(提示:文件中不同的对话间已经使用“=======”)分割
思路:
1、定义一个保存文件的方法,主要用户定义文件名称,写入文件
2、定义一个读取源文件的方法,主要进行目标文件的读取和写入新文件
def save_file(boy,gril,count): #定义输出一个文件名称
boy_file_name = ('boy'+str(count)+'.rtf')
gril_file_name = 'gril'+str(count)+'.rtf' #打开文件
boy_file = open(boy_file_name,'w',encoding = 'US-ASCII')
gril_file = open(gril_file_name,'w',encoding = 'US-ASCII') #写入文件内容(writelines的参数是序列,它会迭代帮你写入文件)
boy_file.writelines(boy)
gril_file.writelines(gril) boy_file.close()
gril_file.close() def read_file(file_name):
f = open('/Users//wufq//Desktop//record.rtf') boy = []
gril = []
count = 0 for each_line in f:
if each_line[:6]!='======':
(role,spoken) = each_line.split(':',1)
print('=====:',each_line.split())
if role == '小甲鱼':
boy.append(spoken)
if role == '小客服':
gril.append(spoken) else:
save_file(boy,gril,count) #保存文件后,在进行初始化
boy = []
gril = []
count = 0
#因为第三段没有'======',所以需要在调用save_file方法,保存第三段
save_file(boy,gril,count) f.close() read_file('/Users//wufq//Desktop//record.rtf')
二、练习题
1、编写一个程序,接受用户的输入并保存为新的文件,程序实现如图:
思路:
1、输入一个文件名,并打开文件
2、利用循环当不等于w时,写入文件内容,否则exit
def file_write(file_name):
f = open(file_name,'w')
print('请输入文本内容【单独输入\'w\'保存退出】') while True:
words = input()
if words != ':w':
f.write('%s\n' %words)
else:
break f.close() file_name = input('请输入文件名称:')
file_write(file_name)
2、编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图: 思路:打开两个文件,然后逐一比较两个文件内的每一行,并记录下行号,如果二者在某一行不一样,则将此行号记录到一个列表中,遍历完每一行之后,关闭列表,将列表返回
def compare_file(compare_file1,compare_file2):
f1 = open(compare_file1)
f2 = open(compare_file2) count= 0 #用于比较两个文件内的行数,并记录行号
differ = [] #用于比较某一行不一样,将行数记录到列表内 for lin1 in f1:
#逐一读取文件内的每一行
lin2=f2.readline()
count += 1
#如果两个文件的某一行不一样,就记录行号到列表内
if lin1 != lin2:
differ.append(count) f1.close()
f2.close()
return differ compare_file1 = input('请输入需要比较的第一个文件名称:')
compare_file2 = input('请输入需要比较的第二个文件名称:') #调用compare_file()方法(此方法主要实现文件的对比)赋值给differ变量
differ = compare_file(compare_file1,compare_file2) if len(differ) == 0 :
print('两个文件完全一样')
else:
print('两个文件共有【%d】处不同:'% len(differ))
for each in differ:
print('第 %d 行不一样' % each) 执行结果:
请输入需要比较的第一个文件名称:file1.txt
请输入需要比较的第二个文件名称:file2.txt
两个文件共有【3】处不同:
第 2 行不一样
第 3 行不一样
第 4 行不一样
3、写两个文件,并且比较两个文件的内容,如果有不同,打印出具体的行数
def write_file1(file_name1): f1 = open(file_name1,'w') print('输入文件名【输入:\'w\'退出登录】') while True:
file_words = input()
if file_words != ':w':
f1.writelines('%s\n' %file_words)
else:
break
f1.close()
file_name1 = input('请输入第一个文件名称:')
write_file1(file_name1) def write_file2(file_name2): f2 = open(file_name2,'w') print('输入文件名【输入:\'w\'退出登录】') while True:
file_words = input()
if file_words != ':w':
f2.writelines('%s\n' %file_words)
else:
break
f2.close() file_name2 = input('请输入第二个文件名称:') write_file2(file_name2) def compare_two_file():
f1 = open(file_name1)
f2 = open(file_name2) count = 0
differ = [] for line1 in f1:
line2=f2.readline()
count += 1 if line1 != line2:
differ.append(count) f1.close()
f2.close()
return differ differ = compare_two_file() if len(differ) ==0:
print('两个文件完全一样')
else:
print('共有【%d】处不同' %len(differ))
for each in differ:
print('第【%d】行不同' %each)
4、编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上
思路: 首先获取文件行数,然后在所有的行数内循环读取,并且打印出来
def print_name_num(name,line_num):
print('文件%s的前%s行的内容如下:'%(name,line_num)) f = open(name) for each in range(int(line_num)):
print(f.readline()) f.close() name = input('请输入要打开的文件(\'record.txt\'):')
line_num = input('请输入需要显示该文件前几行:')
print_name_num(name,line_num)
5、要求在上一题的基础上扩展,用户可以随意输入需要显示的行数(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)
def print_Arbitraryline(name,line):
(start,end) = line.split(':') if start == '':
start = 1
else:
start = int(start) if end == '':
end = -1
else:
end = int(end) f = open(name) if start == '':
if end == '-1':
print('文件%s从开头打印到结尾的内容如下:'%name)
else:
print('文件%s从开头打印到%d的内容如下:'%(name,end))
else:
if end == '-1':
print('文件%s从%d打印到结尾的内容如下:'%(name,start))
else:
print('文件%s从%d打印到%d的内容如下:'%(name,start,end)) for i in range(start-1):
f.readline() num = end-start+1 if num <0:
print(f.read())
else:
for i in range(num):
print(f.readline()) f.close() name = input(r'请输入打开的文件(\'record.txt\'):')
while name != r'record.txt':
name = input('文件输入错误,请重新输入:')
line = input(r'请输入显示的行数【如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容】:')
while line == '':
line = input('行数输入错误,请重新输入:') print_Arbitraryline(name,line)
6、编写一个程序,实现全部替换
思路:
1、定义一个空的列表和一个用于逐步读取文件计数的count
2、逐步读取文件,并判断需要替换的字符在读取的文件内-->把旧的字符替换成新的字符-->列表内写入新的字符
3、统计文件内有多少行需要替换的旧字符,并把旧字符替换成新字符,通过yes/no来确认
4、通过上一步输入的yes来写入文件
def file_replace(name,rep_word,new_word): f = open(name) content = [] #创建空的列表用于存储数据
count = 0 #设置需要的字符串的个数 #替换文件
for each_line in f:
if rep_word in each_line:
count1 = each_line.count(rep_word)
each_line = each_line.replace(rep_word,new_word)
count += count1 content.append(each_line) decide = input('\n文件%s中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:\n'%(name,count,rep_word,rep_word,new_word)) #因为decide里面有需要确认(yes/no)这一步,故这个判断来验证当用户输入yes时才会写入替换的内容
if decide in ['YES','Yes','yes']:
f_write = open(name,'w')
f_write.writelines(content)
f_write.close()
print('替换完成!!!') f.close() name = input('请输入文件名:')
rep_word = input('输入需要替换的单词或者字符:')
new_word = input('输入新的单词或字符:') file_replace(name,rep_word,new_word)
【Python029--一个任务】的更多相关文章
- 为什么很多人坚信“富贵险中求”?
之家哥 2017-11-15 09:12:31 微信QQ微博 下载APP 摘要 网贷之家小编根据舆情频道的相关数据,精心整理的关于<为什么很多人坚信"富贵险中求"?>的 ...
- python基础全部知识点整理,超级全(20万字+)
目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...
- 文件:一个任务 - 零基础入门学习Python029
文件:一个任务 让编程改变世界 Change the world by program 一个任务 这节课,我们需要一起来完成一个任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起 ...
- Tomcat一个BUG造成CLOSE_WAIT
之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
随机推荐
- java开发前的配置
JAVA语言是1995年由Sun公司退出的一门高级编程语言,在2009年4月20被ORACLE公司收购 看看java体系图
- Navicat Premium 安装与激活破解版简单操作 (原)
首先下载navicate程序以及破解文件,这里一并存到了百度网盘直接下载即可 链接:https://pan.baidu.com/s/11ptFmsV1o3B5oB00zm2NdQ 密码:yw82 解压 ...
- webpack打包jQuery,jQuery未定义
怎么来兼容老式jQuery插件 ProvidePlugin + expose-loader / externals 1.ProvidePlugin + expose-loader webpack.co ...
- python中的list的*运算使用过程中遇到的问题
目的: 想生成一个[[],[],[]] 这样的列表, 所以就 [[]]*3 这样做了,但是这样做会有问题,这样list中的三个list其实是同一个list. 例如:a=[[]]*3,然后a[0].ap ...
- python绝对路径的表述方式 及 字符串的转义
当我们打开某文件的路径时,应该时刻注意绝对路径的表示方法,例如打开某个txt文件时 1, with open(‘d:\77\111.txt’) as f: f.read() 此时会报错 ,路径被反 ...
- Maven的作用、用途、内涵、愿景
maven被许多人认为是一个构建工具.许多人最初是从熟悉ant而转到maven的,因此很自然地这样认为maven是一个构建工具.但是maven并不仅仅是一个构建工具,也不是ant的一个替代工具.mav ...
- .net nancy
官网 文档 入门教程 参考
- 2.scrapy安装
A.Anaconda如果已安装,那么可以通过 conda 命令安装 Scrapy,安装命令如下: conda install Scrapy ============================ ...
- python 文件路径名,文件名,后缀名的操作
需要使用路径名来获取文件名,目录名,绝对路径等等. 使用os.path 模块中的函数来操作路径名.下面是一个交互式例子来演示一些关键的特性: >>> import os >&g ...
- java -cp & java jar的区别
java -cp java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Lin ...