在python 2.7中删除_之前和包括_的字符

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16405601/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 22:31:41  来源:igfitidea点击:

Remove characters before and including _ in python 2.7

pythonstringpython-2.7splitword-wrap

提问by user2343368

The following code returns into a nice readable output.

以下代码返回一个很好的可读输出。

def add_line_remove_special(ta_from,endstatus,*args,**kwargs):
    try:
        ta_to = ta_from.copyta(status=endstatus)
        infile = botslib.opendata(ta_from.filename,'r')
        tofile = botslib.opendata(str(ta_to.idta),'wb')
        start = infile.readline()
        import textwrap
        lines= "\r\n".join(textwrap.wrap(start, 640))
        tofile.write(lines)
        infile.close()
        tofile.close()

This is the output, now I would like to remove all the characters until and including the _

这是输出,现在我想删除所有字符,直到并包括 _

Ichg_UNBUNOA3                                   14                2090100000015                      14                1304221445000001
MSG_BGM380                                         610809                             9  NA
MSG_DTM13720130422                           102
Grp1_RFFON test EDI
Grp2_NADBY 2090100000015                         9
Grp2_NADIV 2090100000015                         9
Grp2_NADDP 2090100000015                         9
Grp7_CUX2  EUR4
Grp8_PAT22                                                                                              5  3  D   30
Grp25_LIN1        02090100000022                     EN
Grp25_QTY47               5
Grp25_QTY12               5
Grp26_MOA203             15.00
Grp28_PRIINV        3000.00           1000PCE
Grp33_TAX7  VAT                                                                                 21.00                              S
Grp25_LIN2        02090100000039                     EN
Grp25_QTY47              10
Grp25_QTY12              10
Grp26_MOA203            350.00
Grp28_PRIINV       35000.00           1000PCE
Grp33_TAX7  VAT                                                                                 21.00                              S

How can I do this?

我怎样才能做到这一点?

采纳答案by Martijn Pieters

To get all text on a line after a underscore character, split on the first _character and take the last element of the result:

要获取下划线字符后一行上的所有文本,请拆分第一个_字符并获取结果的最后一个元素:

line.split('_', 1)[-1]

This will also work for lines that do nothave an underscore character on the line.

这也适用于行上没有下划线字符的行。

Demo:

演示:

>>> 'Grp25_QTY47               5'.split('_', 1)[-1]
'QTY47               5'
>>> 'No underscore'.split('_', 1)[-1]
'No underscore'

Translating this to your code:

将其转换为您的代码:

import textwrap

ta_to = ta_from.copyta(status=endstatus)
with botslib.opendata(ta_from.filename,'r') as infile:
    with botslib.opendata(str(ta_to.idta),'wb') as tofile:
        for line in textwrap.wrap(next(infile), 640):
            line = line.split('_', 1)[-1]
            tofile.write(line + '\r\n')