python替换文件的某个字符串_用Python替换文件中的字符串

python替换文件的某个字符串_用Python替换文件中的字符串将所有这些代码放入一个名为mass_replace的文件中.在Linux或MacOSX下,您可以执行chmodxmass_replace,然后运行此操作.在Windows下,您可以使用pythonmass_replace后跟相应的参数来运行它.#!/usr/bin/pythonimportosimportreimportsys#listofextensionstorepl…

大家好,又见面了,我是你们的朋友全栈君。

将所有这些代码放入一个名为mass_replace的文件中.在Linux或Mac OS X下,您可以执行chmod x mass_replace,然后运行此操作.在Windows下,您可以使用python mass_replace后跟相应的参数来运行它.

#!/usr/bin/python

import os

import re

import sys

# list of extensions to replace

DEFAULT_REPLACE_EXTENSIONS = None

# example: uncomment next line to only replace *.c, *.h, and/or *.txt

# DEFAULT_REPLACE_EXTENSIONS = (“.c”, “.h”, “.txt”)

def try_to_replace(fname, replace_extensions=DEFAULT_REPLACE_EXTENSIONS):

if replace_extensions:

return fname.lower().endswith(replace_extensions)

return True

def file_replace(fname, pat, s_after):

# first, see if the pattern is even in the file.

with open(fname) as f:

if not any(re.search(pat, line) for line in f):

return # pattern does not occur in file so we are done.

# pattern is in the file, so perform replace operation.

with open(fname) as f:

out_fname = fname + “.tmp”

out = open(out_fname, “w”)

for line in f:

out.write(re.sub(pat, s_after, line))

out.close()

os.rename(out_fname, fname)

def mass_replace(dir_name, s_before, s_after, replace_extensions=DEFAULT_REPLACE_EXTENSIONS):

pat = re.compile(s_before)

for dirpath, dirnames, filenames in os.walk(dir_name):

for fname in filenames:

if try_to_replace(fname, replace_extensions):

fullname = os.path.join(dirpath, fname)

file_replace(fullname, pat, s_after)

if len(sys.argv) != 4:

u = “Usage: mass_replace \n”

sys.stderr.write(u)

sys.exit(1)

mass_replace(sys.argv[1], sys.argv[2], sys.argv[3])

编辑:我从原来的答案改变了上面的代码.有几个变化.首先,mass_replace()现在调用re.compile()来预编译搜索模式;第二,为了检查文件的扩展名,我们现在将一个文件扩展名的元组传递给.endswith()而不是调用.endswith()三次;第三,它现在使用最近版本的Python中可用的with语句;最后,file_replace()现在检查是否在文件中找到模式,如果没有找到该模式,则不会重写该文件. (旧版本将重写每个文件,即使输出文件与输入文件相同,也可以更改时间戳;这是不起眼的).

编辑:我将其更改为默认值以替换每个文件,但是您可以编辑一行以将其限制为特定的扩展名.我认为更换每个文件是一个更实用的开箱即用的默认值.可以使用扩展名或文件名列表不要触摸扩展,使其不区分大小写的选项等.

编辑:在评论中,@asciimo指出了一个错误.我编辑了这个修复bug. str.endswithwith()被记录为接受一个元组元素尝试,但不是一个列表.固定.此外,我做了几个函数接受一个可选参数,让你传递一个元组的扩展;应该很容易修改它来接受一个命令行参数来指定哪些扩展名.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142681.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java数组返回元素位置_把返回值用数组形式返回java

    java数组返回元素位置_把返回值用数组形式返回javaimportjava.util.Scanner;importjavax.xml.soap.SAAJResult;/***@author大杨*@date2019年8月13日下午3:10:52*/publicclassLinearArray{publicstaticvoidmain(String[]args){Scannerinput=newScan…

  • docker高级教程_docker到底怎么用

    docker高级教程_docker到底怎么用一、基于Linux安装Docker1、下载关于Docker的依赖环境yum-yinstallyum-utilsdevice-mapper-persistent-datalvm22、设置镜像下载Docker的镜像源yum-config-manager–add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3、安装Dockeryummakecachefastyum-yinstall

    2022年10月15日
  • MySQL增删改查常用语句命令「建议收藏」

    MySQL增删改查常用语句命令「建议收藏」 2017/11/01 |  未分类 |songjian|  1条评论 |  1818viewsMySQL关系型数据库RDS中的老大哥,增删改查是MySQL入门的基础,数据库吧来说说MySQL数据库增删改查常用语句。增删改查语句增删改查的语句命令为增:insert删:delete改:update查:SELECT或者show库操作创建数据库:createdatabaseshujukuba;…

    2022年10月25日
  • 反射getmethod参数_java通过反射获取属性值

    反射getmethod参数_java通过反射获取属性值1、forName方法forName是一个静态方法,其作用:通过调用来获取类名对应的Class对象,同时将Class对象加载进来。如果将类名保存在字符串(如xml)中,就可以在程序运行时,动态调用加载。注意:只有调用的参数是类名或者方法时,才可用。2、newInstance()方法作用:将对象实例化。返回类型为Object。与new的区别在于,new可以带参,而newInstance()不可以,…

  • pfx证书获取私钥「建议收藏」

    pfx证书获取私钥「建议收藏」publicclassKeyUtil{publicKeyUtil(){}publicstaticPrivateKeygetPrivateKeyFromPFX(InputStreaminputStream,StringpfxFilePwd)throwsPKIException{PKCS12pkcs12=newP…

  • Unity 安装失败原因

    Unity 安装失败原因文件路径中含有中文,会乱码,导致安装失败\color{red}{文件路径中含有中文,会乱码,导致安装失败}文件路径中含有中文,会乱码,导致安装失败把文件路径换成没有中文的就好了!\color{red}{把文件路径换成没有中文的就好了!}把文件路径换成没有中文的就好了!…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号