【求助】python如何实现字符串和数字的转换

thecorr 2010-02-01 11:13:10
从文件读取出字符串 要把一部分实现++,
举例:AT005CC56,要把AT后面的数字++,改成006,再写回去

要把字符串转换成数字,再转回去,求教大侠如何实现,多谢

...全文
3211 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_su 2010-02-03
  • 打赏
  • 举报
回复
嗯,是有因数字相同换错的情形,而且replace/sub本身会再次查找,效率应该会差点,可以先记录匹配位置,最后再一次性替换。譬如,我想递增AB后面数字,可如下:
import re

text = 'A100R200C555B555'
robj = re.compile(r'(?<=[AB])\d+')
found = []
beg = 0
end = len(text)
while beg < end:
mobj = robj.search(text, beg)
if not mobj:
break
beg = mobj.end()
found.append((mobj.start(), mobj.end()))

rep = text
for beg, end in found:
num = str(int(text[beg:end])+1).zfill(end-beg)
rep = rep[:beg] + num + rep[end:]

print found
print rep

结果:
[(1, 4), (13, 16)]
A101R200C555B556
marvin0920 2010-02-03
  • 打赏
  • 举报
回复
最后的num的长度忘指定了
以上只是作为处理字符串内数字运算的参考方案
marvin0920 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thecorr 的回复:]
各位,我的字符串是这样的 A100R200C555B555,几个前后几个字母后面的数字有可能相同的,但只要改B后面的。
如果用replace 或者sub ,会将C后面的也替换掉。
[/Quote]

只改后面的?那这样行不?

>>> import re
>>> from string import Template
>>> STR='A100R200C555B555'
>>> h = STR[:-len(re.findall('[0-9]+',STR)[-1])]
>>> t = Template('%s$num'%h)
>>> t.substitute(num=(int(re.findall('[0-9]+',STR)[-1])+1).__str__())
'A100R200C555B556'
angel_su 2010-02-03
  • 打赏
  • 举报
回复
好像str.replace()默认替换所有吧...
thy38 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thecorr 的回复:]
各位,我的字符串是这样的 A100R200C555B555,几个前后几个字母后面的数字有可能相同的,但只要改B后面的。
如果用replace 或者sub ,会将C后面的也替换掉。
[/Quote]不会的,replace默认只会替换第一个,除非你指定第三个参数count。
thy38 2010-02-02
  • 打赏
  • 举报
回复
用正则吧:
import re
a = '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
thecorr 2010-02-02
  • 打赏
  • 举报
回复
各位,我的字符串是这样的 A100R200C555B555,几个前后几个字母后面的数字有可能相同的,但只要改B后面的。
如果用replace 或者sub ,会将C后面的也替换掉。
marvin0920 2010-02-02
  • 打赏
  • 举报
回复
这样是否满足?!

>>> 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'
yzx714 2010-02-02
  • 打赏
  • 举报
回复
对字符串执行eval可以获得对应的数值,比如eval("134")得到134,
对数字执行str可以获得对应的字符串
不过eval不是很安全,比如你的字符串是从用户来的,用户可能会给你一个删除文件的字符串,建议使用pickle
winbsd 2010-02-02
  • 打赏
  • 举报
回复
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
thy38 2010-02-02
  • 打赏
  • 举报
回复
我的有一点点问题,修正一下:
import re
a = 'AT005CC56'
reg = re.compile(r'AT(\d+?)[^\d]+?.*')
match = reg.search(a)
if match is not None:
num = match.groups()[0]
format = '%' + '0%dd' % len(num)
a= a.replace(num, format % (int(num)+1))

print a

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧