有人能帮助我会很好。
我有一个看起来像这样的文本文件:
#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)
或修改脚本,以便它舍入数字而不是乘以,但没有成功,我遇到了语法错误等。
如果有人可以改善我的脚本以便将结果四舍五入,或者给我另一个脚本将结果四舍五入,那将是一种好感。
我不想学习编程,我只是在寻找解决方案。
谢谢。
答案 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 }},B
或C
)D
-1个以上数字\d+
-匹配的可选子字符串
(?:,\d+)?
-逗号,
-1个或多个数字。结果:
注释
\d+
用点代替逗号以简化计算match.group(0).replace(',', '.')
-找到的数字强制转换为浮点数,再乘以100,再除以655.957 float(...)*100.0/655.957
-格式化浮点舍入结果"{0:.2f}".format(...)
-将小数点分隔符恢复为.replace(".",",")
。