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)


相关推荐

  • 查看文件内容linux命令_shell读取文件夹下所有文件

    查看文件内容linux命令_shell读取文件夹下所有文件查看文件内容总览cat由第一行开始显示文件内容tac从最后一行开始显示,可以看出tac是cat的倒着写!nl显示的时候,顺道输出行号!more一页一页的显示文件内容less

  • 数百万辆汽车的最强大脑——云端车联网架构实战

    数百万辆汽车的最强大脑——云端车联网架构实战

  • 正则表达式Python_python正则表达式匹配字符串

    正则表达式Python_python正则表达式匹配字符串转载:https://www.jianshu.com/p/5295c5988b7f一、正则表达式语法(一)字符与字符类1、特殊字符:\.^$?+*{}[]()|以上特殊字符要想使用字面值,必须使用\进行转义。2、字符类包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A…

  • ubuntu find方法

    ubuntu find方法

  • git下载与安装教程[通俗易懂]

    git下载与安装教程[通俗易懂]1.下载地址官网:https://git-scm.com/download/win2.安装选中文件编辑器选notepad++编辑器记得要先安装好3.测试安装是否成功鼠标右键桌面,显示如图说明安装成功打开gitbaseHere输入git–version可以查看版本4.配置全局用户和邮箱信息1)打开gitbaseHere,输入如下命令,回车即可gitconfig–globaluser.nam…

  • ICA文件打开方式

    ICA文件打开方式ICA文件打开方式1、点击连接桌面如图1,载ICA文件会自动调用本地receiver客户端打开2、手动打开ICA文件如图2,可单击ICA文件-右键-打开方式选择-wfcrun32.exe程序打开(wfcrun32.exe程序路径C:\ProgramFiles\Citrix\ICAClient或C:\ProgramFiles(x86)\Citrix\ICAClient)第一次打开方式选择我看到打开方式列举的有Citrix字样就选择它了,以后直接点“打开文件”就看到远程桌面了。在任务

发表回复

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

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