我有以下代码
infile = botslib.opendata(ta_from.filename,'r')
tofile = botslib.opendata(str(ta_to.idta),'wb')
start = infile.readline()
import textwrap
import re
lines= "\r\n".join(textwrap.wrap(start, 640))
for line in lines:
re.sub('^\...[_]*', '',line)
tofile.write(line.split('_')[-1])
infile.close()
tofile.close()
输入
Ichg_UNBUNOA3 14 2090100000015 14 1304221445000001
现在的输出是 IchgUNBUNOA3 14 2090100000015 14 1304221445000001但我希望它是 UNBUNOA3 14 2090100000015 14 1304221445000001
ichg也可以是grp1 grp12
我做错了什么?
答案 0 :(得分:0)
试试这个:
print re.sub('^[^_]*_', '', 'Ichg_UNBUNOA3 14 2090100000015 14 1304221445000001')
说明:
^ begin of the line
[^_]* all characters that are not underscore 0 or more time
_ underscore
你必须在分裂(我认为最好的方式)或正则表达式(你已经写完两个!)之间做出选择。
for line in lines:
tofile.write(line.split('_')[-1])
或
for line in lines:
tofile.write(re.sub('^[^_]*_', '', line))
答案 1 :(得分:0)
主要问题是你的lines
变量实际上并不是一个行列表 - 它是一个包含连接在一起的包裹行的单个字符串。因此,您一次循环字符串一个字符,而不是一次处理一行。
你需要摆脱围绕textwrap调用的"\r\n".join
调用,你应该按照预期在列表中包含这些行。
至于正则表达式:除了错误之外,该代码没有用处,因为你从未真正将re.sub
调用的结果分配给任何东西。但是无论如何都不需要它,因为下面的split
调用达到了同样的目的。
简而言之,您的代码应该看起来更像这样:
infile = botslib.opendata(ta_from.filename,'r')
tofile = botslib.opendata(str(ta_to.idta),'wb')
start = infile.readline()
import textwrap
lines= textwrap.wrap(start, 640)
for line in lines:
tofile.write(line.split('_')[-1])
infile.close()
tofile.close()