Practice
0 编写一个程序, 接受用户的输入并保存为新文件, 程序实现如图:
# IDLE显示效果
>>> ================================ RESTART ================================
>>>
请输入文件名: something.txt
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
从明天起,和每一个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每一个人
给每一条河每一座山取一个温暖的名字
陌生人,我也为你祝福
愿你有一个灿烂的前程
愿你有情人终成眷属
愿你在尘世获得幸福
我只愿面朝大海,春暖花开
code
file = input('请输入文件名: ')
test_file = open(file, 'w')
print('请输入内容【单独输入\':w\'保存退出】:')
while True:
seq = input('')
if seq != ':w':
# 这种方法较理想
test_file.write('%s\n' % seq)
# 这种方法无法识别\n
# test_file.write(seq)
else:
break
test_file.close()
1 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如代码表示:
>>> ================================ RESTART ================================
>>>
请输入需要比较的头一个文件名: something.txt
请输入需要比较的另一个文件名: something2.txt
两个文件共有[4]处不同
第 4 行不一样
第 7 行不一样
第 16 行不一样
第 17 行不一样
code
# 从明天起,做一个幸福的人
# 喂马、劈柴,周游世界
# 从明天起,关心粮食和蔬菜
# 我有一所房子,面朝大海,春暖花开
#
# 从明天起,和每一个亲人通信
# 告诉他们我的幸福
# 那幸福的闪电告诉我的
# 我将告诉每一个人
# 给每一条河每一座山取一个温暖的名字
# 陌生人,我也为你祝福
# 愿你有一个灿烂的前程
# 愿你有情人终成眷属
# 愿你在尘世获得幸福
# 我只愿面朝大海,春暖花开
file_name1 = input('请输入需要比较的头一个文件名: ')
file_name2 = input('请输入需要比较的后一个文件名: ')
file1 = open(file_name1)
file2 = open(file_name2)
# 计算行
num = 0
# 统计不相同的个数
count = []
for each1 in file1:
each2 = file2.readline()
num += 1
if each1 != each2:
count.append(num)
file1.close()
file2.close()
if len(count) == 0:
print('两个文件一样!')
else:
print('两个文件共有[%d]处不同' % len(count))
for each in count:
print('第 %d 行不一样!' % each)
2 编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行打印到屏幕上,程序实现如下图:
>>> ================================ RESTART ================================
>>>
请输入要打开的文件: tttt.txt
请输入需要显示该文件的前几行: 13
文件tttt.txt的前12行内容如下:
小客服: 小甲鱼,今天有客户问你是不是傻逼
小甲鱼: 卧槽
小客服: 不要激动
小甲鱼: 这个人真没素质
小客服: 你想知道我怎么回答他的吗
小甲鱼: 你怎么回答的
小客服: 是,恭喜你回答正确
小甲鱼: 卧槽,塑料友情
小客服: 其实那么客户是个妹子
小甲鱼: 好看不
小客服: 想知道啊,一百元
小甲鱼: 傻吊,再见
小客服: 逗你玩呢
================================================================
code
file_name = input('请输入需要打开的文件: ')
num = int(input('请输入需要显示该文件的前几行: '))
print('\n文件%s的前%s的内容如下:\n' % (file_name, num))
file = open(file_name)
for i in range(num):
seq = file.readline()
print(seq, end = '\n')
file.close()
请输入需要打开的文件: something.txt
请输入需要显示该文件的前几行: 5
文件something.txt的前5的内容如下:
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
3 呃,不得不说我们的用户变得越来越刁钻了。要求在上一题的基础上扩展,用户可以随意输入需要显示的行数。(如:输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从21行到文件结尾的所有内容)
file_name = input('请输入需要打开的文件: ')
str1 = input('请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: ')
leng = len(str1)
while leng > 5:
print('对不起目前供测试的文本仅支持两位索引 XX:XX!')
str1 = input('请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: ')
file = open(file_name)
list1 = file.readlines()
length = len(list1)
if leng == 1:
start = 0
end = length
if leng == 2:
if str1[0] == ':':
start = 0
end = int(str1[1])
else:
start = int(str1[0])
end = length
elif leng == 3:
if str1[1] == ':':
start = int(str1[0])
end = int(str1[2])
elif str[0] == ':':
start = 0
end = int(str1[1])*10 + int(str1[2])
else:
start = int(str1[0])*10 + int(str1[1])
end = length
elif leng == 4:
if str1[1] == ':':
start = int(str1[0])
end = int(str1[2])*10 + int(str1[3])
elif str2[2] == ':':
start = int(str1[0])*10 + int(str1[1])
end = int(str1[3])
elif leng == 5:
start = int(str1[0])*10 + int(str1[1])
end = int(str1[3])*10 + int(str1[4])
print('\n文件 %s 从 %d 行到 %d 行的内容如下:\n' % (file_name, start, end))
for i in range(start, end):
print(list1[i])
# 小甲鱼用了 file.strip()去除空格 和file.split()拆分':'两边
# (begin, end) = str1.split()
Result
请输入需要打开的文件: record.txt
请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: :
文件 record.txt 从 0 行到 19 行的内容如下:
小客服:小甲鱼,今天有客户问你是不是傻逼
小甲鱼:卧槽
小客服:不要激动
小甲鱼:这个人真没素质
小客服:你想知道我怎么回答他的吗
小甲鱼:你怎么回答的
小客服:是,恭喜你回答正确
小甲鱼:卧槽,塑料友情
小客服:其实那么客户是个妹子
小甲鱼:好看不
小客服:想知道啊,一百元
小甲鱼:傻吊,再见
小客服:逗你玩呢
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
起床晒太阳
请输入需要打开的文件: record.txt
请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: 3:6
文件 record.txt 从 3 行到 6 行的内容如下:
小甲鱼:这个人真没素质
小客服:你想知道我怎么回答他的吗
小甲鱼:你怎么回答的
>>>
请输入需要打开的文件: record.txt
请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: :6
文件 record.txt 从 0 行到 6 行的内容如下:
小客服:小甲鱼,今天有客户问你是不是傻逼
小甲鱼:卧槽
小客服:不要激动
小甲鱼:这个人真没素质
小客服:你想知道我怎么回答他的吗
小甲鱼:你怎么回答的
>>>
请输入需要打开的文件: record.txt
请输入需要显示该文件的行数[格式如 7:12 或 12: 或 :15]: 6:
文件 record.txt 从 6 行到 19 行的内容如下:
小客服:是,恭喜你回答正确
小甲鱼:卧槽,塑料友情
小客服:其实那么客户是个妹子
小甲鱼:好看不
小客服:想知道啊,一百元
小甲鱼:傻吊,再见
小客服:逗你玩呢
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
起床晒太阳
4 编写一个程序,实现全部替换功能,程序实现如图:
>>>
请输入文件名: record.txt
请输入需要替换的单词或字符: 小甲鱼
略
code
def file_replace(file_name, rep_word, new_word):
f_read = open(file_name)
file = f_read.readlines()
content = []
count = 0
for eachline in file:
if rep_word in eachline:
# 统计对象中出现的次数 .count(obj)
count = eachline.count(rep_word)
# stringObj.replace(rgExp, replaceText)
# stringObj 必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。
# rgExp 必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式。
# replaceText 必选项。是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中,replaceText 参数也可以是返回替换文本的函数。
eachline = eachline.replace(rep_word, new_word)
content.append(eachline)
decide = input('\n文件 %s 中共有 %s 个 [%s] \n你确定要把所有的[%s]替换为[%s]吗?\n[YES/NO]: '\
% (file_name, count, rep_word, rep_word, new_word))
if decide in ['YES', 'Yes', 'yes']:
f_write = open(file_name,'w')
f_write.writelines(content)
f_write.close()
f_read.close()
file_name = input('请输入文件名: ')
rep_word = input('请输入需要替换的单词或字符: ')
new_word = input('请输入新的单词或字符: ')
file_replace(file_name, rep_word, new_word)
Result:
请输入文件名: record.txt
请输入需要替换的单词或字符: 素质
请输入新的单词或字符: 才华
文件 record.txt 中共有 1 个 [素质]
你确定要把所有的[素质]替换为[才华]吗?
[YES/NO]: yes