#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’, а затем запустить для них эту функцию