0. 编写一个程序,接受用户的输入并保存为新的文件

fname = input('请输入文件名:')
file = open(fname,'x')
print('请输入内容【单独输入\':w\'保存退出】:')
while 1:
    content = input()
    if content == ':w':
        break
    else:
        
        file.write('%s\n'%content)
file.close()

1. 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与不同字符的位置(列)

f1_name = input('请输入需要比较的第一个文件名:')
f2_name = input('请输入需要比较的第二个文件名:')

file1 = open(f1_name)
file2 = open(f2_name)

count = 0    #定义行数
differ = []  #记录行数

for line1 in file1:
    line2 = file2.readline()
    count += 1
    if line1 != line2:
        differ.append(count)

file1.close()
file2.close()

if len(differ) == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共%d行不同'%len(differ))
    for line in differ:
        print('第%d行不一样'%line)

方法一这个参考了网上普遍的答案,只能显示哪一行不一样,并没有指出索引值,下面进行修改,详细到不同的位置,顺便用用把功能封装,调用函数的方法

def compare(f1_name,f2_name):   #给带参且有返回值
    file1 = open(f1_name)
    file2 = open(f2_name)

    row = 0     #记录哪一行
    count = 0   #记录一共几处错误

    for (line1,line2) in zip(file1,file2):
        row += 1
        if line1 != line2:
            index = 0
            for (char1,char2) in zip(line1,line2):
                index += 1        
                if char1 != char2:
                    print('第%d行第%d列不一样'%(row,index))
                    count += 1
    file1.close()
    file2.close()
    return count

f1_name = input('请输入需要比较的第一个文件名:')
f2_name = input('请输入需要比较的第二个文件名:')

count = compare(f1_name,f2_name)

if count == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共%d处不同'%count)

看看运行结果:

===================================
请输入需要比较的第一个文件名:file1.txt
请输入需要比较的第二个文件名:file3.txt
两个文件完全一样!
===================================
请输入需要比较的第一个文件名:file1.txt
请输入需要比较的第二个文件名:file2.txt
第1行第5列不一样
第1行第6列不一样
第3行第1列不一样

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

def readline(file_name,start,end):
    file = open(file_name)
    print('第%d行到第%d内容为:'%(start,end))
    for row in range(end):
        print(row)
        a = file.readline()
        if start-1 <= row < end:
            print(a,end='')
        else:
            continue
    file.close()
    
file_name = input('请输入文件名:')
s_e = input('请指定输出行数(形如a:b):')
while s_e == '':
    s_e = input('输入有误,请重新输入:')
(start,end) = s_e.split(':')
if start == '':
    start = 1
else:
    start = int(start)
if end == '':
    end = -1
else:
    end = int(end)
print(start)
print(end)


readline(file_name,start,end)

程序还有点问题,输入“x:”即end为空值时,无法读出从第x行至最后一行

 

3.编写一个程序,实现“全部替换”功能

def replace(file_name,o_word,n_word):
    file = open(file_name,'r')               #读文件
    file_new = open('2' + file_name,'w')     #另存为一个文件2 
    
    for eachline in file:
        if o_word in eachline:
            eachline = eachline.replace(o_word,n_word)    #替换使用replace函数
        file_new.write(eachline)          #这里因为疏忽了对齐,调试了很久,将file读取的每一行写入file2
            
    file.close()       
    file_new.close()

file_name = input('请输入文件名:')
o_word = input('请输入被替换的:')
n_word = input('请输入新的:')
replace(file_name,o_word,n_word)

基本思路:打开源文件1,遍历每一行,如果有需要替换的内容,使用replace替换后,再将句子写入新文件2

存在的问题:运行时很慢,估摸着是因为把文件全部内容按行各读写一遍的原因,现在技能暂时无法找到更好的解决办法

然后网上有很多参考方法,但是有的我读不懂而且在自己电脑环境下调试也不太对,就放弃了那些方案,按着自己的理解写出