Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换文件中的多个字符串_Python_Replace - Fatal编程技术网

Python 替换文件中的多个字符串

Python 替换文件中的多个字符串,python,replace,Python,Replace,我想用一个作为参数给出的符号替换文件中不同的MAC地址符号: python mac_replacer.py -m 00:1a:e8:31:71:7f -f sample.txt 应替换与给定MAC地址对应的每个MAC地址 Lorem00.1a.e8.31.71.7fipsum fb76.03f0.6701多洛·西特·阿梅特,康塞特图尔·萨迪普斯汀sed001ae831717fdiam voluptua00-1a-e8-31-71-7fvero eos和accusam以及justo duo do

我想用一个作为参数给出的符号替换文件中不同的MAC地址符号:

python mac_replacer.py -m 00:1a:e8:31:71:7f -f sample.txt
应替换与给定MAC地址对应的每个MAC地址

Lorem00.1a.e8.31.71.7fipsum fb76.03f0.6701多洛·西特·阿梅特,康塞特图尔·萨迪普斯汀sed001ae831717fdiam voluptua00-1a-e8-31-71-7fvero eos和accusam以及justo duo dolores和ea Reum。Stet fb7603f06701 clita kasd gubergren001a-e831-717f

应转向:

Lorem00:1a:e8:31:71:7fipsum fb76.03f0.6701多洛尔坐在阿梅特,康塞图尔坐在sed00:1a:e8:31:71:7fdiam voluptua00:1a:e8:31:71:7f。Stet fb7603f06701 clita kasd gubergren00:1a:e8:31:71:7f

到目前为止,我所做的是将参数中的MAC地址解析为一个转换器,该转换器识别输入并输出在给定文本中查找它们所需的所有其他符号。但我在替换它们方面半途而废

(代码显示给定MAC地址采用十六进制表示法的情况;省略标识符部分,加载if语句)


这是可行的,但我需要用构造重复整个过程好几次。有没有更好的解决办法?另外,我想把更改写回同一个文件。我试过了,但似乎不起作用。

将您的模式放在一个列表中并循环:

mac = args.mac_address #In this case 00:1a:e8:31:71:7f

colon2 = mac #00:1a:e8:31:71:7f
dot2 = colon2.replace(":",".") # 00.1a.e8.31.71.7f
hyphen2 = colon2.replace(":","-") # 00-1a-e8-31-71-7f
nosymbol = colon2.replace(":","") # 001ae831717f
colon4 = "001a:e831:717f" # integer is missing used your string instead
dot4 = colon4.replace(":",".") # 001a.e831.717f
hyphen4 = colon4.replace(":","-") # 001a-e831-717f


replacethis = [ colon2 , dot2, hyphen2, nosymbol, colon4, dot4, hyphen4]  

put ="""Lorem 00.1a.e8.31.71.7f ipsum fb76.03f0.6701 dolor sit amet, 
consetetur sadipscing sed 001ae831717f diam voluptua. 
00-1a-e8-31-71-7fAt vero eos et accusam et justo duo dolores et ea rebum. 
Stet fb7603f06701 clita kasd gubergren 001a-e831-717f"""

for line in put.split("\n"):
    for n in replacethis:                 
        line = line.replace(n, mac)             
    print(line)
输出:

Lorem 00:1a:e8:31:71:7f ipsum fb76.03f0.6701 dolor sit amet, 
consetetur sadipscing sed 00:1a:e8:31:71:7f diam voluptua. 
00:1a:e8:31:71:7fAt vero eos et accusam et justo duo dolores et ea rebum. 
Stet fb7603f06701 clita kasd gubergren 00:1a:e8:31:71:7f
测试:


您的代码未命中
整数
,因此无法生成
冒号4
点4
连字符4
,我使用了注释中的模式,并使用打印到屏幕文件进行演示。

您可以使用
re.sub

import re
import contextlib
@contextlib.contextmanager
def change_log(filename):
  data = open(filename).read()
  addresses = re.findall('[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+\.\d+\.\d+\.[a-z0-9]+|[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-\d+\-\d+\-[a-z0-9]+|[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+', data)
  new_data = re.sub('[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+\.\d+\.\d+\.[a-z0-9]+|[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-\d+\-\d+\-[a-z0-9]+|[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+', re.sub('\.', ':', addresses[0]), data)
  yield data
  f = open(filename, 'w')
  f.write(new_data)
  f.close()

with change_log('sample.txt') as f:
  print(f)
输出:

Lorem 00:1a:e8:31:71:7f ipsum fb76.03f0.6701 dolor sit amet, consetetur sadipscing sed 001ae831717f diam voluptua. 00:1a:e8:31:71:7fAt vero eos et accusam et justo duo dolores et ea rebum. Stet fb7603f06701 clita kasd gubergren 00:1a:e8:31:71:7f
Lorem 00:1a:e8:31:71:7f ipsum fb76.03f0.6701 dolor sit amet, consetetur sadipscing sed 001ae831717f diam voluptua. 00:1a:e8:31:71:7fAt vero eos et accusam et justo duo dolores et ea rebum. Stet fb7603f06701 clita kasd gubergren 00:1a:e8:31:71:7f