Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示

学习视频中的任务:

将文件(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.编写一个程序,接受用户的输入并保存为新的文件,程序实现如图:

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第1张图片

代码如下: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.编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第2张图片

代码实现: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)

运行结果:

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第3张图片


2.编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上,程序实现如图:

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第4张图片

代码实现: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行开始到文件结尾所有内容)

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第5张图片

代码: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.编写一个程序,实现全部替换功能。

Python--小甲鱼学习笔记--第29课:文件读写、文件对比、文件分割、内容显示_第6张图片

代码实现: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()


你可能感兴趣的:(python学习)