2013-03-22 3 views
0

대체 할 이름이 포함 된 텍스트 문자열이있는 파일이 있습니다. 두 개의 열, A 및 B 이름이 들어있는 다른 파일이 있습니다. 열 A는 문자열 (파일 1)과 동일한 이름을 포함합니다. 나는 기본적으로 그 이름을 B 열의 이름으로 대체하고 싶습니다. 파이썬을 사용해 보았지만, 초보자가 너무 많습니다. 모든 포인터가 크게 감사하겠습니다.파이썬 검색 및 바꾸기

 

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

+0

을 내가 그 물론 추가해야 참조 :

단어, 콜라, COLB처럼 보이는 –

답변

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 형식)의 문자열 특성 때문일 것입니다. 이것은 내가 원래 일한 것입니다 ... 아마도 그렇게 좋지는 않을 것입니다. 비록, 만약 내가 교체 기능을 얻을 수있는 트릭을 할 수 있습니다 ..? (((((((((('1OTU_1_769_wint_446':

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에서의 모습 0.00156420, '1OTU_1_822_wint_445': 0.00000000) 0.5700 : 0.00156410, '1OTU_1_851_wint_454': 0.00000000) 등 ... ?. 예를 들어 1OTU_1_769_wint_446이

+0

RegEx 검색과 Yarkee에서 제공 한 사전 예제를 결합하면 매력처럼 작동했습니다. 감사합니다. –

+0

이것을 병합해야합니다. 모든 사람들이 그것을 볼 수 있도록 – AlG