首页 技术 正文
技术 2022年11月14日
0 收藏 707 点赞 4,745 浏览 4910 个字

一、文件编写

任务:将文件(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、编写一个程序,接受用户的输入并保存为新的文件,程序实现如图:
【Python029–一个任务】
思路:
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 differcompare_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 differdiffer = 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)


    					
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,117
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,590
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,435
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,206
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,842
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,927