练习题1-全局替换程序:
1.写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换
python your_script.py old_str new_str filename
2.替换完毕后打印替换了多少处内容
1.txt的内容:
马纤羽 深圳 173 13744234523 乔亦菲 广州 173 15823423525 罗梦竹 北京 173 18523423421 刘诺涵 北京 173 18523423765 岳妮妮 深圳 173 18835324553 贺婉萱 深圳 173 18533434452 叶梓萱 上海 173 18042432324
代码:
1 # @Time :2019/6/8 20:57 2 # -*- encoding:utf-8 -*- 3 4 import os 5 import sys 6 7 my_sys = sys.argv # 接收输入的参数 8 if len(my_sys) != 4: 9 print("Wrong inputing!") 10 os._exit(0) 11 else: 12 print("Replacing....") 13 old_str = str(my_sys[1]) 14 new_str = str(my_sys[2]) 15 filename = my_sys[3] 16 new_file = filename + "_new" 17 18 count = 0 # 计数 19 with open(filename, mode='r', encoding='utf-8') as f: 20 data = f.read() 21 if old_str in data: 22 data = data.split(" ") # 用 分割字符串输出为列表 23 24 f_new = open(new_file, mode='w', encoding='utf-8') 25 26 for i in data: # i = '马纤羽 深圳 173 13744234523' 27 if old_str in i: 28 count += 1 29 i = i.replace(old_str, new_str) 30 f_new.write(i + " ") # 写入文件 31 f_new.close() 32 33 if count > 0: 34 if os.path.exists(filename): 35 os.remove(filename) 36 os.replace(new_file, filename) 37 # os.rename("contacts_new", "contacts") #Windows没有rename函数 38 print("替换成功,替换了{0}处".format(count)) 39 else: 40 print("{0}文件中没有{1}".format(filename, old_str))
执行脚本:
修改文件内容的思路:
以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容读到内存中进行修改,然后写入新文件,
最后后利用os模块的方法,把原文件删除,重命名新文件为原文件名(见代码34、35、36行)。