python - 尝试在 181 个文本文件中以常量变量“大小”开头的行上的数字相乘
问题描述
我有一个包含 181 个文本文件的文件夹,每个文件都包含数字,但我只需要将具有“大小”的行上的那些乘以诸如 0.5 之类的常量变量,但我确实做到了这一点:搜索并用结果替换数学运算在记事本++中 但是我想要做的是没有表达式或引号,以便我所在社区的其他人可以简单地做同样的事情,而无需编辑每个文件以满足乘以每个数字所需的格式。例如:
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 中,选择Search菜单上的Replace in Files (或按+ + ),然后输入:CtrlShiftH
查找:(?<=\s)size(.*?)(\d+)
替换为:\J "size\1" + \2 / 2
文件类型:(*.txt
或您正在寻找的文件扩展名)
在文件夹中:(您正在搜索的文件夹路径)
设置保持修改的文件打开和正则表达式选项(和匹配大小写选项,如果size
始终以小写形式出现),
单击全部替换按钮。
或者,如果您想使用宏,这是一个适合您的宏(您需要编辑文件夹路径):
editor.ReplaceInFiles("(?<=\\s)size(.*?)(\\d+)","\\J \x22size\\1\x22 + \\2 / 2","E:\\Test\\*.txt",eeFindReplaceCase | eeFindReplaceRegExp | eeReplaceKeepOpen,0,"","",0,0);
要运行它,请将此代码另存为,例如,Replace.jsee
然后从宏菜单中的选择...中选择此文件。最后,在Macros菜单中选择Run Replace.jsee 。
说明:
\J
在替换表达式中指定 JavaScript。在此示例中,\2
是来自 的反向引用(\d+)
,因此\2 / 2
表示匹配的数字除以二。