python实现文件名批量替换和内容替换

yipeiwu_com7年前Python基础

指定文件夹,指定文件类型,替换该文件夹下全部文件的内容。

注意在window下的读写内容需要指定编码,还需要在文件头指定#coding:utf-8 编码,避免出现编码问题。

复制代码 代码如下:

#coding:utf-8
import os
import os.path

path='.'
oldStr='.php'
newStr='.html'

for (dirpath, dirnames, filenames) in os.walk(path):
    for file in filenames:
        if os.path.splitext(file)[1]=='.html':
            print(file)
            filepath=os.path.join(dirpath,file)
            try:
                text_file = open(filepath, "r")
                lines = text_file.readlines()
                text_file.close()
                output  = open(filepath,'w',encoding= 'utf-8')
                for line in lines:
                    #print(line)
                    if not line:
                        break
                    if(oldStr in line):
                        tmp = line.split(oldStr)
                        temp = tmp[0] + newStr + tmp[1]
                        output.write(temp)
                    else:
                        output.write(line)
                output.close()
            except Exception:
                print(Exception)
                break



这个示例可以批量替换文件名和内容

复制代码 代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, re

def multi_replace(text, adict):
    rx = re.compile('|'.join(map(re.escape, adict)))
    def xlat(match):
        return adict[match.group(0)]
    return rx.sub(xlat, text)

def batrename(curdir, pairs):
    for fn in os.listdir(curdir):
        newfn = multi_replace(fn, pairs)
        if newfn != fn:
            print("Renames %s to %s in %s." % (fn, newfn, curdir))
            os.rename(os.path.join(curdir, fn), os.path.join(curdir, newfn))
        file = os.path.join(curdir, newfn)

        if os.path.isdir(file):
            batrename(file, pairs)
            continue

        text = open(file).read()
        newtext = multi_replace(text, pairs)
        if newtext != text:
            print("Renames %s." % (file,))
            open(file, 'w').write(newtext)

if __name__=="__main__":
    while True:
        oldname = raw_input("Old name: ")
        newname = raw_input("New name: ")
        if oldname and newname:
            batrename(os.path.abspath('.'), {oldname:newname})
        else: break

相关文章

python中__call__内置函数用法实例

本文实例讲述了python中__call__内置函数的用法。分享给大家供大家参考。具体分析如下: 对象通过提供__call__(slef, [,*args [,**kwargs]])方法...

python安装教程 Pycharm安装详细教程

python安装教程 Pycharm安装详细教程

python安装教程和Pycharm安装详细教程,分享给大家。 首先我们来安装python 1、首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org...

约瑟夫问题的Python和C++求解方法

么是约瑟夫问题? 约瑟夫问题是一个有趣的数学游戏,游戏规则如下: 1、N个人围成一个圈,编号从1开始,依次到N。 2、编号为M的游戏参与者开始报数,报数从1开始,后面的人报数接龙,直到K...

解决pyinstaller打包exe文件出现命令窗口一闪而过的问题

解决pyinstaller打包exe文件出现命令窗口一闪而过的问题

用pyinstaller打包的exe文件打开时,命令窗口一闪而过,并且未出现GUI界面,也看不到错误信息,然后去网上搜相关的信息,最多的两种说法: 1.添加raw_input()或者os...

详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法

详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法

在用pandas包和numpy包对数据进行分析和计算时,经常用到DataFrame和array类型的数据。在对DataFrame类型的数据进行处理时,需要将其转换成array类型,是以下...