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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据结构PDF下载

    数据结构PDF下载数据结构算法实现及解析C语言[第二版]高一凡pdf文字版http://qunying.jb51.net:81/201303/books/sjjg_sfszjjx_jb51net.rar大话数据结构中文PDF清晰扫描版完整版[36M]http://qunying.jb51.net:81/201209/books/dhsjjg_jb51.rarC#语言描述数据结构pdf版ht…

    2022年6月24日
    33
  • shell脚本——xsync

    shell脚本——xsyncxsync脚本基于rsync工具,rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点,它只是拷贝文件不同的部分,因而减少了网络负担。rsync-rvl$pdir/$fname$user@hadoop$host:$pdir常用参数:-r,–recursive对子目录以递归模式处理-R,–relativ…

    2022年5月31日
    55
  • JS中对象转数组案例解析

    JS中对象转数组案例解析以一次实际开发中的实例,将几种对象转数组的方法都试了一遍://consterrorList=Object.keys(error)//console.log(‘error’,error)//console.log(‘Array.from’,Array.from(error))//console.log(‘keys’,Object.keys(error))//console.log(‘values’,Object.val

    2022年9月12日
    0
  • resize函数用法_ubound函数

    resize函数用法_ubound函数resize函数原型voidresize(InputArraysrc,OutputArraydst,Sizedsize,doublefx=0,doublefy=0,intinterpolation=INTER_LINEAR)各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可

    2025年7月26日
    0
  • golang 2021激活码3月最新在线激活「建议收藏」

    golang 2021激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    76
  • 不是单组分组函数

    不是单组分组函数问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
    22

发表回复

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

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