如何解决尝试在181个文本文件中以常数开头的行上以数字“ size”相乘的数字相乘
我有一个181个文本文件的文件夹,每个文件夹包含数字,但是我只需要将具有“大小”的行上的数字乘以常量变量(例如0.5),但是我确实是这样实现的:Search and replace math operations with the result in Notepad++ 但是我想做的是没有表达或引号,因此我所在的社区的其他成员可以简单地执行相同操作,而无需编辑每个文件来满足将每个数字相乘所需的格式。 例如:
farmers = {
culture = armenian
religion = coptic
size = 11850
}
乘以0.5即可:
farmers = {
culture = armenian
religion = coptic
size = 5925
}
我尝试制作一个python脚本,但是尽管我对python的了解不多,但是它没有用:
import operator
with open('*.txt','r') as file:
data = file.readlines()
factor = 0.5
count = 0
for index,line in enumerate(data):
try:
first_word = line.split()[0]
except IndexError:
pass
if first_word == 'size':
split_line = line.split(' ')
# print(' '.join(split_line))
# print(split_line)
new_line = split_line
new_line[-1] = ("{0:.6f}".format(float(split_line[-1]) * factor))
new_line = ' '.join(new_line) + '\n'
# print(new_line)
data[index] = new_line
count += 1
elif first_word == 'text_scale':
split_line = line.split(' ')
# print(split_line)
# print(' '.join(split_line))
new_line = split_line
new_line[-1] = "{0:.2f}".format(float(split_line[-1]) * factor)
new_line = ' '.join(new_line) + '\n'
# print(new_line)
data[index] = new_line
count += 1
with open('*.txt','w') as file:
file.writelines(data)
print("Lines changed:",count)
因此,对此有任何解决方案,我宁愿不要让社区格式的人员将每个文件都用于我的解决方案。任何事情都行得通,因为我还没有找到一个简单的解决方案,对于使用notepad ++或Sublime Text 3的用户而言,这种解决方案可以使任何人快速,轻松地理解。
解决方法
如果使用 EmEditor ,则可以使用EmEditor的替换文件功能。在EmEditor中,选择搜索菜单上的替换为文件(或按 Ctrl + Shift + H ),然后输入:
查找:(?<=\s)size(.*?)(\d+)
替换为:\J "size\1" + \2 / 2
文件类型:*.txt
(或您要查找的文件扩展名)
在文件夹中 :(您正在搜索的文件夹路径)
设置保留打开的修改文件和正则表达式选项(如果size
总是小写,则设置 Match Case (匹配大小写)选项。 ),
点击全部替换按钮。
或者,如果您想使用宏,则这是适合您的宏(您需要编辑文件夹路径):
editor.ReplaceInFiles("(?<=\\s)size(.*?)(\\d+)","\\J \x22size\\1\x22 + \\2 / 2","E:\\Test\\*.txt",eeFindReplaceCase | eeFindReplaceRegExp | eeReplaceKeepOpen,"",0);
要运行此命令,请将此代码另存为Replace.jsee
,然后从宏菜单中的选择... 中选择此文件。最后,在 Macros 菜单中选择 Run Replace.jsee 。
说明:
替换表达式中的 \J
指定JavaScript。在此示例中,\2
是来自(\d+)
的后向引用,因此\2 / 2
表示匹配数除以2。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。