首页 > 解决方案 > 尝试在 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 的人。

标签: pythonnotepad++emeditor

解决方案


如果你使用EmEditor,你可以使用EmEditor的文件替换功能。在 EmEditor 中,选择Search菜单上的Replace in Files (或按+ + ),然后输入:CtrlShiftH

查找(?<=\s)size(.*?)(\d+)

替换为\J "size\1" + \2 / 2

文件类型:(*.txt或您正在寻找的文件扩展名)

在文件夹中:(您正在搜索的文件夹路径)

设置保持修改的文件打开正则表达式选项(和匹配大小写选项,如果size始终以小写形式出现),

单击全部替换按钮。

EmEditor - 在文件中替换对话框

或者,如果您想使用宏,这是一个适合您的宏(您需要编辑文件夹路径):

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表示匹配的数字除以二。

参考: EmEditor 如何:替换表达式语法


推荐阅读