我需要帮助使用Notepad ++和python脚本插件在文本文件中四舍五入数字以进行货币转换

时间:2019-05-09 12:24:17

标签: python regex notepad++

有人能帮助我会很好。

我有一个看起来像这样的文本文件:

#Zsdfgsdqfq
#A100,56
#Zjtdhsdfg
#Zadsdf
#B12,53
#Zdwfgs
#C10,00
#Zdsfgdfg
#D40,00

在文件#A,#B,#C和D#中,我需要除以6.55957的数字 这是我想要的结果:

#A15,33
#Zjtdhsdfg
#Zadsdf
#B1,91
#Zdwfgs
#C1,52
#Zdsfgdfg
#D6,10

我发现了这一有益的讨论:Notepad ++ How to multiply numbers from mass replace?

所以我在Notepad ++中使用了Python脚本插件

我不知道如何管理小数点和用于小数点分隔符的逗号。

我发现我可以删除所有逗号,然后将结果除以100,然后就可以在结果文件中搜索并替换以逗号替换点。

这是基于我在链接的讨论中阅读的内容的脚本:

def multiply_number_in_context(match):
    return "{0}{1}".format(match.group(1), str(int(match.group(2))/655.957)) # thank you Wiktor Stribiżew to explain me how to get rid of this : ,''

editor.rereplace(r'(\#A)(\d+)', multiply_number_in_context)
editor.rereplace(r'(\#B)(\d+)', multiply_number_in_context)
editor.rereplace(r'(\#C)(\d+)', multiply_number_in_context)
editor.rereplace(r'(\#D)(\d+)', multiply_number_in_context)

这是结果:

#Zsdfgsdqfq
#A15.33027317339399
#Zjtdhsdfg
#Zadsdf
#B1.910186185984752
#Zdwfgs
#C1.524490172374104
#Zdsfgdfg
#D6.097960689496415

它可以工作,但是现在我需要用两位小数舍入结果。 #A应该为15.33,#D应该为6.10

似乎方法是使用round(x,2)东西,但我想不起来怎么做。

我试图通过以下方式修改脚本:

return "{0}{1}{2}".format(match.group(1), str(round(int(match.group(2))/655.957), '')), 2) 

或修改脚本,以便它舍入数字而不是乘以,但没有成功,我遇到了语法错误等。

如果有人可以改善我的脚本以便将结果四舍五入,或者给我另一个脚本将结果四舍五入,那将是一种好感。

我不想学习编程,我只是在寻找解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用以下固定脚本:

def multiply_number_in_context(match):
    return "{0:.2f}".format(float(match.group(0).replace(',', '.'))*100.0/655.957).replace(".",",")

editor.rereplace(r'(?<=#[A-Z])\d+(?:,\d+)?', multiply_number_in_context)

请参见regex demo。详细信息:

  • (?<=#[A-Z])-向后正向匹配,匹配的位置是紧跟#之后的位置,然后匹配任何大写ASCII字母(更改为[A-D]只能匹配A,{{1 }},BC
  • D-1个以上数字
  • \d+-匹配的可选子字符串
    • (?:,\d+)?-逗号
    • ,-1个或多个数字。

结果:

enter image description here

注释

  • \d+用点代替逗号以简化计算
  • match.group(0).replace(',', '.')-找到的数字强制转换为浮点数,再乘以100,再除以655.957
  • float(...)*100.0/655.957-格式化浮点舍入结果
  • "{0:.2f}".format(...)-将小数点分隔符恢复为.replace(".",",")