2013-03-22 130 views
0

我有一个文本字符串文件包含我想要替换的名称的文件。我有另一个文件有两列,A和B包含名称。列A包含与字符串(文件1)中相同的名称。我基本上想用B列中的名称来替换这些名称。我尝试过使用Python,但我仍然太过于习惯于将它拉下来。任何指针将不胜感激。python搜索和替换

 

File1    
NameA.....NameB....NameC....etc 

File2     
A  B  
NameA NameD   
NameB NameE   
NameC NameF 

想;

 
File1      
NameD....NameE....NameF....etc 

+2

[你尝试过什么(http://www.whathaveyoutried.com)不工作 – AlG 2013-03-22 16:57:17

+0

我应该补充说,当然是见 – 2013-03-23 14:03:42

回答

0

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

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

我也想看看的在线教程,比如这一个:

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

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)) 
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() 
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)) 
0

感谢您的回复。虽然没有一个确实没有正常工作。可能是由于file1中字符串的性质(newick格式)。这是我原来的工作......可能不太好。虽然,如果我能得到一个替代函数的工作,它可能会伎俩..?

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) 

字符串file1中一个看起来像:(((((((((( '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)等...

话,可乐,COLB样子:?如1OTU_1_769_wint_446

+0

将RegEx搜索与Yarkee提供的字典示例结合起来就像一个魅力一样。谢谢。 – 2013-03-23 14:56:15

+0

您应该将它合并到您的阙中所有人都能看到它。 – AlG 2013-03-23 22:28:40