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

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

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

...全文
3055 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2010-02-01 11:13
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: