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変数が実際には行のリストではないことです。これは、ラップされた行が結合された単一の文字列です。その結果、一度に 1 行ずつ処理するのではなく、一度に 1 文字ずつ文字列をループしています。

"\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

分割 (私の意見では最良の方法) または正規表現 (2 つを記述しました!) のいずれかを選択する必要があります。

for line in lines:
    tofile.write(line.split('_')[-1])

また

for line in lines:
    tofile.write(re.sub('^[^_]*_', '', line))
于 2013-05-06T21:21:29.273 に答える