1

我有以下代码

    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

我究竟做错了什么?

4

2 回答 2

0

主要问题是您的lines变量实际上不是行列表 - 它是包含连接在一起的包装行的单个字符串。因此,您一次循环遍历字符串一个字符,而不是一次处理一行。

您需要摆脱"\r\n".jointextwrap 调用周围的调用,并且应该按预期将行放在列表中。

至于正则表达式:除了错误之外,该代码毫无用处,因为您实际上从未将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()
于 2013-05-06T21:43:40.170 回答
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))
于 2013-05-06T21:21:29.273 回答