【求助】python如何实现字符串和数字的转换
从文件读取出字符串 要把一部分实现++,
举例:AT005CC56,要把AT后面的数字++,改成006,再写回去
要把字符串转换成数字,再转回去,求教大侠如何实现,多谢
[解决办法]
这样是否满足?!
>>> STR'AT005CC56'>>> m = re.findall('[0-9]+',STR)>>> m[0]=(int(m[0])+1).__str__().rjust(3, '0')>>> s = re.sub(re.findall('[0-9]+',STR)[0], m[0], STR)'AT006CC56'
[解决办法]
用正则吧:
import rea = 'AT005CC56'reg = re.compile(r'AT(\d+?)[^\d]+?\d*')match = reg.search(a)if match is not None: num = match.groups()[0] format = 'AT%' + '0%dd' % len(num) a = reg.sub(format % (int(num)+1), a)print a
[解决办法]
import re
stram='abc12def000007bcdAB005ABC62b'
fi=re.findall(r'[0-9]+',stram)
for eachNum in fi:
format = '%' + '0%dd' % len(eachNum)
stram=stram.replace(eachNum,format %(int(eachNum)+1))
print stram
[解决办法]
对字符串执行eval可以获得对应的数值,比如eval("134")得到134,
对数字执行str可以获得对应的字符串
不过eval不是很安全,比如你的字符串是从用户来的,用户可能会给你一个删除文件的字符串,建议使用pickle
[解决办法]
嗯,是有因数字相同换错的情形,而且replace/sub本身会再次查找,效率应该会差点,可以先记录匹配位置,最后再一次性替换。譬如,我想递增AB后面数字,可如下:
import retext = 'A100R200C555B555'robj = re.compile(r'(?<=[AB])\d+')found = []beg = 0end = len(text)while beg < end: mobj = robj.search(text, beg) if not mobj: break beg = mobj.end() found.append((mobj.start(), mobj.end())) rep = textfor beg, end in found: num = str(int(text[beg:end])+1).zfill(end-beg) rep = rep[:beg] + num + rep[end:] print foundprint rep
[解决办法]