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()被记录为接受一个元组元素尝试,但不是一个列表.固定.此外,我做了几个函数接受一个可选参数,让你传递一个元组的扩展;应该很容易修改它来接受一个命令行参数来指定哪些扩展名.

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tcpip协议族有哪些

    tcpip协议族有哪些tcpip协议族有哪些有五层应用层运输层网络层数据链路层物理层

    2022年6月22日
    24
  • 3500 左右 办公电脑配置

    3500 左右 办公电脑配置

    2022年7月12日
    29
  • 基于java的项目开发过程_软件开发项目管理整个流程图

    基于java的项目开发过程_软件开发项目管理整个流程图完整项目开发过程原型的设计有产品经理负责。界面的美化有专门的美工负责。前端有专门的前端开发人员负责。研发:研发主要工作就是根据项目的需求文档设计系统架构、设计数据库、编写调试程序代码。对于普通的码农来说,主要的就是编写和调试程序。基于Java的项目开发:1、要想编写程序,需要一个能编写源代码的编辑工具。例如:Notepad++;2、要想测试程序,需要一个编译、执行

    2025年7月23日
    2
  • 数据库查询语句中的排序函数_数据库按照升序排列的语句

    数据库查询语句中的排序函数_数据库按照升序排列的语句1.排序查询语法排序查询语法:select*from表名orderby列1asc|desc[,列2asc|desc,…]语法说明:先按照列1进行排序,如果列1的值相同,则按照列2排序,以此类推asc从小到大排序,即升序desc从大到小排序,即降序默认按照从小到大排序(即asc关键字)举例:–查询未删除男生信息,按学号降序select*fromstudentswhereis_del=0andgender=’男’orderbyid

    2025年10月3日
    2
  • python基础之五大标准数据类型

    python基础之五大标准数据类型学习一门语言,往往都是从HelloWorld开始。但是笔者认为,在一个黑框框中输出一个“你好,世界”并没有什么了不起,要看透事物的本质,熟悉一门语言,就要了解其底层,就是我们常常说的基础。本篇从p

    2022年7月5日
    24
  • cmd: cd /D %~dp0 的含义「建议收藏」

    cmd: cd /D %~dp0 的含义「建议收藏」cd/d%~dp0是什么意思啊?批处理文件中的一条语句意思是 更改当前目录为批处理本身的目录 有些晕吧?不急,我举例 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd/d%~dp0在这里cd/d表示直接转换到后面的路径,否则如果切换盘符,就需要再输入盘符才能切换路径cd/d%~dp0的意思就是cd/dd:\qq %0代表批处理本身…

    2022年9月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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