通过创建列表副本替换多个单词

2024-04-29 07:37:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有替换列表(http://pastebin.com/JH932Qxi) 以及需要替换的列表(http://pastebin.com/RSwdWiKy)。 更换规则:

S1000005    =   S1000005,S1000006,S1000010
S1000007    =   S1000007,S1000008
S1000009    =   S1000009
S2000005    =   S2000005,S2000006,S2000007,S2000008
S2000009    =   S2000009,S2000010
S3000005    =   S3000005,S3000010
S3000006    =   S3000006,S3000008
S3000007    =   S3000007,S3000009

输入行:

S1000005    S2000005    S3000005
S1000006    S2000006    S3000006
S1000007    S2000007    S3000007
S1000008    S2000008    S3000008
S1000009    S2000009    S3000009
S1000010    S2000010    S3000010

结果应该是这样的http://pastebin.com/8BkRFC87。你知道吗

输出示例:

S1000005    S2000005    S3000005
S1000005    S2000005    S3000006
S1000007    S2000005    S3000007
S1000007    S2000005    S3000006
S1000009    S2000009    S3000007
S1000005    S2000009    S3000005

我已经用notepad++(它节省了很多时间)完成了这项工作,但是完全自动化是可能的。(首先我对行进行拆分,然后使用bookmarks行替换,再将3列返回)。你知道吗

如何读取替换列表以创建替换?如何用字典替换出重复的内容?你知道吗

或者是否有任何文本编辑器可以搜索“S100005、S100006、S100010、S100011、S100022、S100023、S100024、S100025、S100056”并将其替换为“S100005”?你知道吗


Tags: comhttp列表pastebins2000005s1000007s1000006s2000009
1条回答
网友
1楼 · 发布于 2024-04-29 07:37:21

从第一个文件中获取措辞{要替换:替换}:

replace = {}
with open('input1') as fd:
    for line in fd:
        head, tail = line.split('=')
        for idt in tail.split(','):
            replace[idt] = head

output中写入第二个文件的内容input2,并替换为:

with open('input2') as ifd, open('output', 'w') as ofd:
    for line in ifd:
        ofd.write('    '.join(replace.get(idt, idt) for idt in line.split()))

这里,dict.get方法用于替换标识符,或者如果标识符本身不存在于词典中,则替换标识符本身。你知道吗

在vim文本编辑器中,用S1000005替换S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056的正则表达式是:

%s/S1000005\|S1000006\|S1000010\|S1000011\|S1000022\|S1000023\|S1000024\|S1000025\|S1000056/S1000005/g

在其他文本编辑器中,某些字符可能需要转义\。取决于使用的正则表达式引擎。 其他regex引擎也可以接受这个:

s/{S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056}/S1000005/g

相关问题 更多 >