0

我有一个包含我想替换的名称的文本字符串的文件。我有另一个包含两列的文件,A 和 B 包含名称。A 列包含与字符串(文件 1)中相同的名称。我基本上想用 B 列中的名称替换这些名称。我尝试过使用 Python,但我仍然是初学者,无法完成它。任何指针将不胜感激。

文件 1               
NameA.....NameB....NameC....等

文件2                 
AB    
姓名A 姓名D         
姓名B 姓名E          
名称C 名称F

想;

文件 1                       
NameD....NameE....NameF....等

4

5 回答 5

1
with open('File1', 'r') as fd:
    keys = fd.read().split()

name_map = {}

with open('File2', 'r') as fd:
    for line in fd.readlines():
        key, value = line.split()
        name_map[key] = value

with open('File1', 'w') as fd:
    new_names = []
    for k in keys:
        new_names.append(name_map[k])
    fd.write(" ".join(new_names))
于 2013-03-22T17:40:53.800 回答
1
#read filrst file as list
with open("file1") as f:
    names1=f.read().strip().split();

#read file2 as dictionary
with open("file2") as f:  
    names2=dict(i.strip().split() for i in  f.readlines())

#write replacement in file3
with open("file3","w") as f:
    f.write(" ".join(names2[i] for i in names1))
于 2013-03-22T17:10:12.890 回答
0

感谢您的回复。虽然,没有一个真的不能正常工作。可能是由于 file1 中字符串的性质(纽威克格式)。这是我最初的工作......可能不太好。虽然,如果我能让替换功能起作用,它可能会成功..?

import re

LineString = open("file1.txt", "r").read()

pattern = re.compile('\d+OTU\_\d+\_\w+\_\d+')
words = pattern.findall(LineString)

colA = []
colB = []

with open("file2.txt", "r") as f:
for line in f:
    parts = line.split()
    if len(parts) > 0:
        colA.append(parts[0])   
    if len(parts) > 1:
        colB.append(parts[1])

#Doesnt work
if words == colA:
LineString.replace(colA, colB)

文件1中的字符串看起来像:(((((((('1OTU_1_769_wint_446':0.00156420,'1OTU_1_822_wint_445':0.00000000)0.5700:0.00156410,'1OTU_1_851_wint_454':0.00000000)等...)

单词,colA,colB 看起来像:例如 1OTU_1_769_wint_446

于 2013-03-23T13:43:49.037 回答
0

我认为你需要这样的代码:

File1 = open("File1", "r")   
File2 = open("File2", "r")   
File3 = open("File3","w")

for line in File2:

    A, B  = line.strip().split('\t')

    for line_string in File1:

        line_string.replace(A,B)

        File3.write('%s\n' % line_string)

File3.close()
于 2013-03-22T17:38:28.643 回答
0

我会考虑使用 RegEx(Python 中的 re 模块)。这将允许您创建可以搜索特定文本模式的函数。如果您正确构造 re.compile() 函数和 re.search() 函数,则可以使用 group() 函数提取文本的选择“组”。该库非常广泛,因此这里是文档的链接:

http://docs.python.org/2/library/re.html

我还会查看一个在线教程,例如这个:

http://www.youtube.com/watch?v=DRR9fOXkfRE

于 2013-03-22T17:02:11.520 回答