2016-10-13 6 views
0

이미 파이썬에 관한 첫 번째 사실을 알고 있다면 이미 답변 된 다른 유사한 질문을 참조하여이 사실을 직접 알았을 것입니다. 방법 중 그와 디렉토리의 모든 파일에 대해 IP 주소를 파이썬의 파일 이름으로 바꿉니다.

, 난 당신이 나에게 다음 사항을 달성 할 수 바라고 있어요 : 나는 IP 파일 이름 자체 주소, 디렉토리에, 인라인 모든 항목을 대체 할 찾고 있어요

.

은의, 즉, 샘플 파일 이름이 "jb-nnnn-xy" 될 것입니다 내 모든 파일이 확장자가없는 D:\super\duper\directory\

파일에 있다고 가정 해 봅시다.

" TCPHOST = 72.163.363.25"

그래서 전체, 수천 개의 파일이 있습니다 : 파일에 IP 주소의 언급이 여러 개인 경우에도 , 나는 (따옴표없이) 같이 보입니다 만 라인 교체에 관심이 있어요 이 디렉토리는 하드 코딩 된 IP 주소가 거의 없습니다.

그리고 관심의 라인은 마지막으로 다음과 같아야합니다

"jb-yyyy-nz"이 파일 자체

이 시간 내 주셔서 대단히 감사하고 도움의 이름입니다 " TCPHOST = jb-yyyy-nz"

!

편집 : 나는 밖으로 시도하고 다른 게시물에서 코드의 단지 뒤범벅 매시 ..

from __future__ import print_function 
import fnmatch 
import os 
from fileinput import FileInput 
import re 

ip_addr_regex = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b') 
def find_replace(topdir, text): 
    for dirpath, dirs, files in os.walk(topdir, topdown=True): 
     files = [os.path.join(dirpath, filename) for filename in files] 
     for line in FileInput(files, inplace=True): 
       print(line.replace(text, str(filename))) 

find_replace(r"D:\testmulefew",ip_addr_regex) 
+0

직접 코드를 작성해 보았습니까? 그렇다면 보여 주실 수 있습니까? –

+0

내가 시도하는 코드로 메인 포스트를 업데이트했습니다 ... 함수에 "예상 된 문자 버퍼 오브젝트"오류가 있습니다. 반복적으로 실행했을 때마다 시도 할 때마다 하나씩 파일을 숨 깁니다. – oompaloompa

답변

0

코멘트를 인라인으로 아래의 코드를 확인하십시오 :

import os 
import re 
import fileinput 
#Get the file list from the directory 
file_list = [f for f in os.listdir("C:\\Users\\dinesh_pundkar\\Desktop\\demo")] 

#Change the directory where file to checked and modify 
os.chdir("C:\\Users\\dinesh_pundkar\\Desktop\\demo") 

#FileInput takes file_list as input 
with fileinput.input(files=file_list,inplace=True) as f: 
    #Read file line by line 
    for line in f: 
     d='' 
     #Find the line with TCPHOST 
     a = re.findall(r'TCPHOST\s*=\s*\d+\.',line.strip()) 
     if len(a) > 0: 
      #If found update the line 
      d = 'TCPHOST = '+str(fileinput.filename()) 
      print (d) 
     else: 
      #Otherwise keep as it is 
      print (line.strip()) 

PS :디렉토리에 파일이 있고 그 안에 다른 디렉토리가 없다고 가정합니다. 그렇지 않으면 파일 목록을 재귀 적으로 수행해야합니다.

+0

감사합니다. Dinesh. – oompaloompa

+0

다음 줄로 가기 전에 입력을 누르십시오. – oompaloompa

+0

그러나 다시 ... 어쨌든, 나는이 오류가 발생했습니다 : Traceback (가장 최근에 마지막으로 호출) : 12 번째 줄의 파일 "resolver.py" with fileinput.input (files = file_list, inplace = True) as f : AttributeError : FileInput 인스턴스에 '__exit__'속성이 없습니다 – oompaloompa

관련 문제