Удалить символы до и включая _ в python 2.7

24

Следующий код возвращается в хороший читаемый вывод.

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()

Это результат, теперь я хотел бы удалить все символы до и включать _

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

Как я могу это сделать?

    
задан user2343368 06.05.2013 в 21:15
источник

1 ответ

52

Чтобы получить весь текст в строке после символа подчеркивания, разделите на первый символ _ и возьмите последний элемент результата:

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

Это также будет работать для строк, у которых not есть символ подчеркивания в строке.

Демо:

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

Переведя это в свой код:

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')
    
ответ дан Martijn Pieters 06.05.2013 в 21:16
источник
  • мне нужно добавить строку в строки: line.split ('_', 1) [- 1] между строками = .... и tofile.write ... –  user2343368 06.05.2013 в 21:23
  • Да, вам нужно сделать это для каждой из строк. –  Martijn Pieters♦ 06.05.2013 в 21:26
  • 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)) для строки в строках: line.split ('_', 1) [- 1] tofile.write (lines) infile.close () tofile.close () приводит к только последний символ файла = S –  user2343368 06.05.2013 в 21:31
  • Вы ничего не делаете с результатом line.split. Вам нужно сохранить это или записать его напрямую: для строки в строках: tofile.write (например, line.split ('_', 1) [- 1]). –  Martijn Pieters♦ 06.05.2013 в 21:35
  • 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 (line.split ('_', 1) [- 1]) infile.close () tofile.close () приводит к вывода, включая символы перед _ –  user2343368 06.05.2013 в 21:51