Добавление символа пробела (» «) 2 символьных пробела после символа точки («.»)?

#python-3.x

#python-3.x

Вопрос:

У нас есть устаревшая система, которая экспортирует отчеты в виде файлов .txt, но почти во всех случаях, когда указывается дата, она указывается после номинала валюты и выглядит следующим образом: 25.0002/14/18 (25 bucks on feb 14th) или 287.4312/08/17 .

Есть ли простой способ проанализировать . и добавить символ пробела на два пробела справа, чтобы разделить строку в Python? Любая помощь приветствуется!

Ответ №1:

Приведенный ниже код добавит пробел между валютой и данными, заданными строкой.

 import re 
my_file_text = "This is some text 287.4312/08/17"
new_text = re.sub("(d .d{2})(d{2}/d{2}/d{2})", r"1 2", my_file_text)
print(new_text)
  

ВЫВОД

 'This is some text 287.43 12/08/17'
  

РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ

(d .d{2}) : Эта часть регулярного выражения фиксирует валюту в своей собственной группе, предполагается, что перед ней будет любое количество цифр (> 1), . а затем только две цифры после, поэтому что-то вроде (1000.25) будет записано правильно, в то время как (1000.205) и (.25) не будут.

(d{2}/d{2}/d{2}) : В этой части фиксируется дата, предполагается, что день, месяц и год в датах всегда будут представлены двумя цифрами каждая и разделены символом /.

Комментарии:

1. Попробуйте добавить некоторое объяснение того, как работает ваше регулярное выражение. Простая слепая вставка регулярного выражения может не помочь OP

2. Спасибо! Пожалуйста, простите мое невежество, я все еще новичок. Второй аргумент в re.findall определяется как буквальный, нет? нужно ли мне определять каждую пару валюта / дата в данном файле, чтобы это работало правильно?

3. @Ryan Я обновил ответ в соответствии с вашими потребностями, просто загрузите текст в одну переменную и передайте его функции.

4. Ахмед, большое тебе спасибо!! Кажется, работает очень хорошо!

5. Рад, что смог помочь Райану, спасибо. P.S Если бы вы могли пометить ответ как принятый для других, я был бы рад.

Ответ №2:

Возможно, более эффективные методы, но простой способ может быть:

 def fix(string):
    if '.' in string:
        part_1, part_2 = string.split('.')
        part_2_fixed = part_2[:2]   ' '   part_2[2:]
        string = part_1   '.'   part_2_fixed
    return string
  
 In [1]: string = '25.0002/14/18'
In [2]: fix(string)                                                                                                                                                               
Out[2]: '25.00 02/14/18'
  

Комментарии:

1. Спасибо! Я не стремлюсь к эффективности! К сожалению, я сталкиваюсь с «ValueError: слишком много значений для распаковки (ожидается 2)»>, потому что этот «экземпляр» валюты / даты встречается довольно часто в файле .txt. Я все еще новичок в Python, поэтому я попытаюсь взломать его вместе!

2. Ах, я вижу, каков пример фрагмента этого текстового файла? Вы могли бы сначала разделить его на части, содержащие эти строки ‘xx.xxxx / xx / xx’, а затем запустить для них эту функцию