学习视频中的任务:
将文件(record.txt)中的数据进行分割并按照以下规律保存起来:
1). 小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
2). 小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
3). 文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
代码实现:
def subfile(boy, girl, count):
file_name_boy = 'boy_' + str(count) + '.txt'
file_name_girl = 'girl_' + str(count) + '.txt'
file_boy = open(file_name_boy,'w')
file_girl = open(file_name_girl,'w')
file_boy.writelines(boy)
file_girl.writelines(girl)
file_boy.close()
file_girl.close()
def split_file(filename):
f = open(filename,'r')
count = 1
boy = []
girl = []
for each_line in f:
if each_line[:6] != "======":
(role, spoken) = each_line.split(':',1) #注意split()使用方式
if role == '小甲鱼':
boy.append(each_line)
elif role == '小客服':
girl.append(each_line)
else:
subfile(boy, girl, count)
count+=1
boy = []
girl = []
subfile(boy, girl, count)
f.close()
filename = r'C:\Users\XXN\Desktop\python\record.txt'
split_file(filename)
0.编写一个程序,接受用户的输入并保存为新的文件,程序实现如图:
代码如下:write_file.py
filename = input('请输入文件名:')
f = open(filename,'w')
words = ''
print("请输入内容【单独输入':w'保存退出】:")
while True:
words = input()
if words != ':w':
f.write('%s\n'%words)
else:
break
f.close()
1.编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:
代码实现:compare_file.py
filename1 = input("请输入需要比较的头一个文件名:")
filename2 = input("请输入需要比较的头一个文件名:")
f1 = open(filename1,'r')
f2 = open(filename2,'r')
diff = [] #存放不同的行号
line = 0 #标记当前行
for each_line1 in f1:
line+=1
for each_line2 in f2:
if each_line1 != each_line2:
diff.append(line)
break
f1.close()
f2.close()
print("两个文件共有【%d】处不同:"%len(diff))
for each in diff:
print("第 %d 行不一样" %each)
运行结果:
2.编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上,程序实现如图:
代码实现:print_file1.py
filename = input("请输入要打开的文件(C:\\test.txt):")
f = open(filename,'r')
lines = int(input("请输入需要显示该文件的前几行:"))
print("文件%s的前%d行的内容如下:" %(filename, lines))
for each_line in f:
print(each_line)
lines-=1
if lines == 0:
break
f.close()
3.呃,不得不说我们的用户变得越来越刁钻了。要求在上一题的基础上扩展,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)
代码:print_file2.py
filename = input("请输入要打开的文件(C:\\test.txt):")
f = open(filename,'r')
contex = f.readlines()
num_row = len(contex)
str_lines = input("请输入需要显示的行数【格式如13:21或:21或21:】:")
(first, last) = str_lines.split(':',1)
print('\n',end='')
if first == '' and last == '':
print('文件%s的全文内容如下:\n'%filename)
for i in range(0,num_row):
print(contex[i])
elif first == '':
last = int(last)
print('文件%s从开始到第%d行的内容如下:\n'%(filename, last))
for i in range(0,last):
print(contex[i])
elif last == '':
first = int(first)
print("文件%s从第%d行到末尾的内容如下:\n"%(filename, first))
for i in range(first-1,num_row):
print(contex[i])
else:
first = int(first)
last = int(last)
print("文件%s从第%d行到第%d行的内容如下:\n"%(filename, first, last))
for i in range(first, last):
print(contex[i])
f.close()
4.编写一个程序,实现“全部替换”功能。
代码实现:replace_words.py
filename = input("请输入文件名:")
f = open(filename,'r')
old_words = input("请输入需要替换的单词或字符:")
new_words = input("请输入新的单词或字符:")
contex = f.read()
length = len(contex)
Index = set()
for curr_word in range(0, length):
Index.add(contex.find(old_words, curr_word, length))
Index = list(Index)
Index.sort(reverse=True)
if Index[-1]==-1:
Index.pop()
print('文件 %s 中共有%d个【%s】'%(filename, len(Index), old_words))
flag = input("您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:"%(old_words, new_words))
if (flag == 'YES') or (flag == 'yes'):
old_sub = len(old_words)
for each in Index:
contex = contex[:each] + new_words + contex[each + old_sub:]
f.close()
f = open(filename,'w')
f.write(contex)
f.close()