用Python中的文件名替换目录中

时间:2016-10-13 11:49:41

标签: python regex file replace substitution

如果我知道关于Python的第一件事,我只是通过引用已经回答的其他类似问题来解决这个问题。

有了这个,我希望你可以帮助我实现以下目标:

我希望将所有出现的IP地址替换为文件名本身,在目录中,内联。

我们说我的所有文件都在D:\super\duper\directory\

文件没有任何扩展名,即示例文件名将为 "jb-nnnn-xy" 。 即使文件中有多个IP地址提及,我也只想更换看起来像这样的行(没有引号):

" TCPHOST = 72.163.363.25"

总的来说,目录中有数千个文件,其中只有少数文件具有硬编码的IP地址。

感兴趣的行最终应该是这样的:

" TCPHOST = jb-yyyy-nz"

其中 "jb-yyyy-nz" 是文件本身的名称

非常感谢您的时间和帮助!

编辑:我正在尝试的其他帖子只是一些混乱的代码......

from __future__ import print_function
import fnmatch
import os 
from fileinput import FileInput
import re

ip_addr_regex = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')
def find_replace(topdir, text):
    for dirpath, dirs, files in os.walk(topdir, topdown=True):
        files = [os.path.join(dirpath, filename) for filename in files]
        for line in FileInput(files, inplace=True):
                print(line.replace(text, str(filename)))

find_replace(r"D:\testmulefew",ip_addr_regex)

1 个答案:

答案 0 :(得分:0)

请检查以下代码并注明内容:

import os
import re
import fileinput
#Get the file list from the directory
file_list = [f for f in os.listdir("C:\\Users\\dinesh_pundkar\\Desktop\\demo")]

#Change the directory where file to checked and modify
os.chdir("C:\\Users\\dinesh_pundkar\\Desktop\\demo")

#FileInput takes file_list as input 
with fileinput.input(files=file_list,inplace=True) as f:
    #Read file line by line
    for line in f:
        d=''
        #Find the line with TCPHOST
        a = re.findall(r'TCPHOST\s*=\s*\d+\.',line.strip())
        if len(a) > 0:
           #If found update the line
            d = 'TCPHOST = '+str(fileinput.filename())
            print (d)
        else:
            #Otherwise keep as it is
            print (line.strip())

P.S: 假设目录包含文件,并且其中没有其他目录。否则,文件列表需要递归执行。