Python:使用关键字替换两个文件中的文本?

2024-10-03 02:35:56 发布

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

我有三份档案:

  1. 关键字列表:

    文件1

    NM_000015
    
  2. 我需要插入的表格数据:

    文件2

    NM_000015   10  NAT2    N-acetyltransferase 2   9606
    
  3. 我需要插入的原始数据:

    文件3

    hsa-miR-153-5p  NM_000015   65.4643
    

我需要使用file1中的关键字来查找file2中包含该关键字的行,并将file3中的关键字替换为file2中的行。你知道吗

结果:

hsa-miR-153-5p  NM_000015   65.4643

hsa-miR-153-5p    NM_000015 10  NAT2    N-acetyltransferase 2   9606    65.4643

Tags: 文件数据列表原始数据关键字档案file1表格
2条回答

这是我的Python 2版本:

# Construct list of keywords
# ** EDIT** this might be better as a set
# A list will use less memory, but a set is much faster lookup
keywords = [kw.rstrip() for kw in open('file1')]

# Construct dictionary of keywords
kvdict = {}

with open('file2') as f2:
    for line in f2:
        kw = line.split()[0]
        if kw in keywords:
            kvdict[kw] = line.rstrip()

with open('file3') as f3:
    for line in f3:
        kw = line.split()[1]
        if kw in kvdict:
            newline = line.replace(kw, kvdict[kw])
            print newline,       # or maybe write it to a file?

但这确实取决于可管理的关键字数量。它还取决于file3中的每一行至少有两个字段。你知道吗

对于python3,将最后的print语句更改为print(newline, end='')。你知道吗

编辑:为避免字典的内存开销,请替换

kvdict = {}

使用:

import shelve
kvdict = shelve.open('keywords')

在节目快结束的时候:

kvdict.close()

您可能还希望删除末尾的keywords文件。你知道吗

正如其他人评论的那样,您的问题缺乏指导实施的细节。如果我理解正确的话,像这样的事情可能会奏效:

file1 = open("path_to_file1")
file2 = open("path_to_file2")
file3 = open("path_to_file3")

keywords = [ line[:-1] for line in file1 if line.strip() ]

translations = {
    line.partition('  ')[0]: line.partition('  ')[2][:-1]
    for line in file2
}

for line in file3 :
    if not line : continue
    for kwd in keywords :
        if kwd in line :
            print line.replace(kwd, translations[kwd])[:-1]
            break
    else :
        print line[:-1]

根据您的规范,实现可能会有所不同:对于file3中没有在file2中指定的行,会发生什么情况?如果文件2中的翻译没有在文件1中给出,会发生什么情况?文件3中的行是否可以包含多个应替换的关键字?等等等等

相关问题 更多 >