任务
需要将文件中的某个字符串改酿成另一个。
办理方案
字符串对象的 replace 方法提供了字符串更换的最简朴的办法。下面的代码支持从一个特定的文件(或标准输入)读取数据,然后写人一个指定的文件(或标准输出):
- importos,sys
- nargs = len(sys.argv)
- if not 3<= nargs <= 5 :
- print "usage: $s search_text replace_text [infile [outfile]]" %\
- os.path.basename(sys.arqv[0])
- else:
- stext = sys.arqv[1]
- rtext = sys.argv[2]
- input_file =sys.stdin
- output_file = sys.stdout
- if nargs >3:
- input_file = open(sys.argv[3])
- if narqs >4:
- output_file = open(sys.argv[4],"w')
- for s in input_file:
- output_file.write(s.replace(stext,rtext))
- output.close()
- input.close()
复制代码 讨论
本节给出的办理方案非常简朴,但那也正是精彩的地方——如果简朴的东西已经够用了,为什么要用复杂的东西?正如开始的“shebang”(shell 头形貌)行所示,这个脚本是一个简朴的主脚本,而不是那些被用来导人的模块,它直接运行在一个 shell 下令行提示中。脚本查抄传递给它的参数以确定要搜索的文本,用于替代的文本,输入文件(默认是标准输入),输出文件(默认是标准输出)。然后循环遍历输入文件中的每一行完成了对每行文本的字符串更换之后,再写入到输出文件。这就结束了。准确点说末了还关闭了所有的文件。
如果内存充裕到可以或许轻松放入两份输人文件(一份是原版的,另一份是完成了替代之后的,因为字符串是不能被改变的,所以必须有两个拷贝),我们就可以进一步地进步速度。一次性完成对所有内容的处理,而不消循环。今天的低端计算机至少都有 256MB以上的内存,处理一个 100MB 左右的文件并不是什么题目,而且处理凌驾100MB的文件的情况也很少。所以,我们也可以用一行语句更换掉那个循环:
- output_file.write(input_file.read().replace(stext, rtext))
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |