# coding: utf-8 """ 练习题1 —— 全局替换程序: 写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换 python your_script.py old_str new_str filename 补充知识点: 需要使用 import sys sys.argv 接收到1个列表 例如:把 “兼职白领学生空姐模特护士联系方式_Test1.txt” 文件中的 深圳 全部更改为 河南 文本内容如下: 乔非菲 广州 172 52 15223423525 罗非竹 上海 175 49 18223423421 刘非涵 上海 170 48 18223423765 岳非妮 株洲 177 54 18225324553 贺非萱 株洲 174 52 18223434452 叶非萱 上海 171 49 18222432324 刘非菲 株洲 168 50 18222432366 """ # 实现方式1:【测试的时候发现,r和w操作,在不使用r+等混合方式的情况下,同时使用会有问题。建议open读取完成后,再去做open写入。】 """ import sys # 接收用户调用脚本时,外部传入的参数,是一个列表 user_input_argv = sys.argv # 传入的老字符串 old_str = user_input_argv[1] # 传入的新字符串 new_str = user_input_argv[2] # 文件路径 file_path = user_input_argv[3] # 读取文件(小的文件修改,直接加载到内存去修改即可。暂时不用 不占内存的方式 实现) read_file = open(file=file_path, mode="r", encoding="utf-8") # 存储文件内容 file_data = "" # for循环文件每1行,替换字符串,并且存入file_data for line in read_file: if old_str in line: line = line.replace(old_str, new_str) file_data += line # 关闭文件操作 read_file.close() # 写入文件 write_file = open(file=file_path, mode="w", encoding="utf-8") # 把新的文件内容,重新写入原文件 write_file.write(file_data) # 关闭文件操作 write_file.close() print("修改完成!") """ # 实现方式2:非常简洁的写法【with open(file, "r", encoding="utf-8") as f:】,该写法会自动close """ import sys # 导入sys包,用于接收外部参数 # 接收用户外部输入参数,是一个list列表 user_input_argv = sys.argv # 老字符串 old_str = user_input_argv[1] # 新字符串 new_str = user_input_argv[2] # 文件路径 file_path = user_input_argv[3] # 定义变量,存储文件内容 file_data = "" # 读取文件 with open(file=file_path, mode="r", encoding="utf-8") as f: for line in f: if old_str in line: line = line.replace(old_str, new_str) file_data += line # 写入(修改)文件 with open(file=file_path, mode="w", encoding="utf-8") as f: f.write(file_data) print("更新完成!!!") """ # 实现方式3:(不占用内存,而去临时占用硬盘的方式,修改文件) """ import os # 该包用于操作文件 import sys # 该包用于接收外边参数 # 接收用户调用脚本时,外部传入的参数,是一个列表 user_input_argv = sys.argv # 传入的老字符串 old_str = user_input_argv[1] # 传入的新字符串 new_str = user_input_argv[2] # 旧文件路径 old_file_path = user_input_argv[3] # 新文件路径 new_file_path = "{0}.new.txt".format(old_file_path) # 打开旧文件(读取) read_old_file = open(file=old_file_path, mode="r", encoding="utf-8") # 打开新文件(写入) write_new_file = open(file=new_file_path, mode="w", encoding="utf-8") # for循环文件每1行,替换字符串,并且写入新文件 for line in read_old_file: if old_str in line: line = line.replace(old_str, new_str) write_new_file.write(line) # 关闭文件操作 read_old_file.close() write_new_file.close() # 把新文件覆盖到旧文件中 os.replace(new_file_path, old_file_path) print("更新完成!湖南株洲是个好地方呀。") """