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


相关推荐

  • 作为一个死忠粉,我的 IntelliJ IDEA 一直都是这样来设置的,效果很棒!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:judasn https://github.com/judasn/IntelliJ-IDEA-Tutorial…

    2021年6月25日
    82
  • 【pycharm】解决pycharm无法在settings里安装库的问题

    【pycharm】解决pycharm无法在settings里安装库的问题本来想直接在pycharm的setting里安装库,但是安装的时候一直转圈圈,要么是太慢要么显示失败。发现用命令行可以解决这个问题。具体操作如下:打开命令行,输入下面语句(确保路径一致)。安装完成:刷新一下pycharm的setting中显示库的界面,可以看到已经更新了不少个库。搞定~~…

    2022年8月26日
    5
  • 一款漂亮的网址永久发布页源码

    一款漂亮的网址永久发布页源码介绍:好看导航页面可自动测域名延迟html页面,可以做个网址导航引导页面!网盘下载地址:http://www.zijiepan2.xyz/XR7VmgADZXm正文:公众号投票系统,暂不支持小程序注:只支持认证服务号和认证订阅号借权支付,非认证公众号无法使用礼物功能1,域名自动切换,随机域名,炮灰域名(启用随机域名时,简介:没有后台直接html修改自己的资料就行网盘地址:http://zijiepan2.xyz/vJMdhdMSBuE图片:…

    2022年10月21日
    3
  • ubuntu安装进入EFI Shell「建议收藏」

    ubuntu安装进入EFI Shell「建议收藏」背景:用VirtualBox安装Ubuntu14:第一次,无法进入LiveCD界面.第二次,勾选EFI界面后成功进入安装流程,成功安装。但是安装完成之后重启,进入了EFIShell界面,如下:解决方案:输入:fs:0cdEFI/ubuntugrubx64.efi引自ServerFault:IfyouaregettingtotheEFIshellyou

    2022年7月24日
    18
  • 用SqlBulkCopy批量安插数据时提示来自数据源的 String 类型的给定值不能转换为指定目标列的类型 int…

    用SqlBulkCopy批量安插数据时提示来自数据源的 String 类型的给定值不能转换为指定目标列的类型 int…dr[“description”]=ds.Tables[0].Rows[i][“组织描述”].ToString();dr[“groupuser”]=ds.Tables[0].Rows[i][“组织成员”].ToString();dr[“userid”]=AMSession.LoginUser…

    2022年7月20日
    19
  • 计算机发展概述教案_计算机的过去与未来 教案

    计算机发展概述教案_计算机的过去与未来 教案《计算机发展史教案》由会员分享,可在线阅读,更多相关《计算机发展史教案(3页珍藏版)》请在人人文库网上搜索。1、计算机发展与应用说课稿教材分析本课选自七年级信息技术上第三课,计算机的产生与发展。本课的内容较多,经过我的分析,我这节课的内容为:1,计算机的产生2,计算机的发展历史3,计算机的未来发展方向。本课知识为了解性知识,学生学完本课可以了解到今生今世的产生与发展历史,并且理解计算机的未来发展方…

    2022年10月18日
    2

发表回复

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

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