python 查找字符串并将其替换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 查找字符串并将其替换相关的知识,希望对你有一定的参考价值。
查找某TXT文件里面“abcdef”是否存在,如果存在,则进行替换,替换成“123456”,
下面代码但是不能成功。望大侠能给帮助。
=========================代码==============
#!usr/bin/env python
import string
Num_List=['abcdef','123456','789012','fedcba','100000','200000']
f1=open('J:/wenjian/1/1.txt','r')
for line in f1:
for eachName in Num_List:
if not line.find(eachName)==-1:
if eachName=='abcdef':
line.replace(eachName,'123456') #这里替换不成功。
print ('zhaodao:' + eachName)
f1.close()
====================代码=======================
望大侠更更正或者有更好的代码。
我用的是python 3.3 .,如果带解释,且解释清楚,可以给双倍分。
问题已经解决:
==================代码======================
import re
#import string
f1=open('J:/wenjian/1/1.txt','r').read()
#print(f1)
#f1.decode()#把byte类型转换成string类型,这里注意,在py3.0中已经是unicode
f1=re.sub('abcdef','123456',f1)
#print (f1)#此时已经替换成功
f_w=open('J:/wenjian/1/1.txt','w')#新建一个文件,把替换后的内容写进去
#f1=f1.encode('utf-8')#从string转换成bytes类型,这里也不需要
f_w.write(f1)#必须要是bytes类型才能写进去
f_w.close()
=================代码结束====================
谢谢 “justistbc”网友。分就给你了。
在CSDN中找到了答案。
http://bbs.csdn.net/topics/390454102?page=1#post-394449861
f1=open('J:/wenjian/1/1.txt','r').read()#把整个文件读进来作为整个字符串
f1 = re.sub('abcdef','123456',f1)#替换所有符合的情况
f_w=open('J:/wenjian/1/replace_1.txt','wb')#新建一个文件,把替换后的内容写进去
f_w.write(f1)
f_w.close()追问
>>>
Traceback (most recent call last):
File "J:/wenjian/python/seach2.py", line 5, in
f_w.write(f1)
TypeError: 'str' does not support the buffer interface
>>>
上面是运行的提示。
好像是因为python 3版本,text和data是不一样的
在f_w.write(f1)之前,添加一句f1=f1.encode('utf-8')显式编码一下试试
没有报错。但是文件中字符串并没有替换。我运行了多次。结果都一样。
你测试通过了么?
import re
f1=open('J:/wenjian/1/1.txt','r').read()#把整个文件读进来作为整个字符串
f1=f1.decode()#把byte类型转换成string类型
f1 = re.sub('abcdef','123456',f1)#替换所有符合的情况
print f1#此时已经替换成功
f_w=open('J:/wenjian/1/replace_1.txt','wb')#新建一个文件,把替换后的内容写进去
f1=f1.encode('utf-8')#从string转换成bytes类型
f_w.write(f1)#必须要是bytes类型才能写进去
f_w.close()
#测试通过的,应该没问题了
python 3.3 提示:
>>>
Traceback (most recent call last):
File "J:/wenjian/python/seach2.py", line 3, in
f1=f1.decode()#把byte类型转换成string类型
AttributeError: 'str' object has no attribute 'decode'
>>>
你用哪个版本? 我测试试试
3.3.1
追问测试还是不对。你版本肯定不是3.3.1
参考技术A f1=open('J:/wenjian/1/1.txt','r')for line in f1
你这里是不是少了点什么,f1只是文件句柄,需要执行读操作才能遍历,
调用readlines()
确实有更好的代码,那就是使用re.sub,它同时包含了查找和替换两步的操作,
而不是像你写的那样的字符串比较性能那么低 参考技术B line = line.replace(eachName,'123456') 参考技术C MARK
以上是关于python 查找字符串并将其替换的主要内容,如果未能解决你的问题,请参考以下文章