2014-02-12 1 views
0

두 개의 파일이 있습니다. 하나의 파일에서 정규 표현식을 찾고 두 번째 파일의 문자열로 대체합니다. 첫 번째 파일은 세 번째 인덱스에 문자열이 들어있는 .csv 파일입니다. 인덱스 0-2는 데이터에 추가되었습니다. 파일 1에서Python의 특정 인덱스에서 시작하는 정규 표현식을 수행하는 방법

문자열은 다음과 같습니다 : 파일 2에서

"foo http://abc bar http://123." 
... 
... 

, 그냥 FILE1에있는 사람을 대체하기위한 것입니다 URL의 목록이 있습니다.

파일 2는 다음과 같습니다

"http://def" 
"http://456" 
... 
... 

나는 URL을 찾고, 파일 1을 반복하여 시작합니다. URL을 찾으면 파일 2의 URL로 바꾼 다음 다음 URL로 이동합니다. 이 모든 순서로 수행되기 때문에 파일의 URL의 교체시 파일 2로부터 URL의 반복되지 않습니다 1.

구문 분석 후 결과 문자열은 다음과 같이한다 완료 :

"foo http://def bar http://456" 

내 문제가 re.sub를 사용하여 대체를 수행 할 때 첫 번째 URL 또는 두 URL을 동시에 파일 2의 동일한 URL로 바꿀 수 있습니다. 예를 들어, 내 문자열은 다음과 같이 끝납니다 :

"foo http://def bar http://def" 

re.sub를 사용하여 첫 번째 코드를 대체 할 수있는 방법이 있습니까? URL을 입력 한 다음 문자열에있는 위치를 추적하여 두 번째 URL에 도달하면 파일 2의 해당 URL로 바꿉니다.

다음과 같이 내가 작성한 코드는 다음과 같습니다

shortened = open('shortenedURLs.txt','r') 
linesReadfromFile = shortened.readlines() 
newRetweet = open('new_Retweet.csv','w') 
with open('tweets_nurl.csv','rb') as inputfile1: 
    read=csv.reader(inputfile1, delimiter=',') 
    a = 0 
    for row in read: 
     url = re.findall('https*://', row[3]) 
    if url: 
      for i in xrange(len(url)): 
      currentLine=row[3].rstrip('\n') 
      if re.search('http://', row[3]): 
       iter = re.finditer(r'http://',row[3]) 
       indices = [m.start(0) for m in iter] 
       print indices 
       currentLine=re.sub(r'http://[^\s]*', linesReadfromFile[a].rstrip('\n'), currentLine, count=1) 
       a=a+1 
      if re.search('https://',row[3]): 
       currentLine = re.sub(r'https://[^\s]*', linesReadfromFile[a].rstrip('\n'), currentLine) 
       a=a+1 
     newRetweet.write(row[0]+","+row[1]+","+row[2]+","+currentLine+'\n') 


    else: 
     newRetweet.write(','.join(row)+'\n') 

shortened.close() 
newRetweet.close() 

다음은 일치가 발견되는 경우 "인쇄 지수"말해,하지만 난 대체이 수행해야하는 위치 지정을 활용하는 방법을 잘 모르겠어요 .

도움 주셔서 감사합니다. 난 당신이 원하는 것을 할 것이라고 생각

답변

1
site_urls = list(open("urls.txt")) 
def replacer(match): 
    return site_urls.pop(0).strip() 

re.sub("http[^ ]*",replacer,my_file_text) 

... 함수가 쉽게 람다 그것을 대체 할 수있는 한 줄이기 때문에 굵은의

... 난 단지 설명을 목적으로

을위한 일반적인 방법을 사용
관련 문제