如果我知道关于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)
答案 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: 假设目录包含文件,并且其中没有其他目录。否则,文件列表需要递归执行。