2011-06-14 2 views
1

아래에 포함 된 현재 스크립트는 확장명이 .las 인 파일로 이동하여 특정 문자열을 다른 것으로 바꿉니다 (예 : cat -> kitten, dog -> puppy).어떻게 이름 바꾸기 기능을 포함하도록이 스크립트를 변경할 수 있습니까?

내가 원했던 것은 스크립트를 실행할 때 ANY .LAS 파일의 이름을 현재 디렉토리의 특정 이름으로 바꿀 수있는 기능을이 스크립트에 추가하는 것입니다 (예 : * .las -> animals.las).

하나의 파일을이 디렉토리로 드래그하여 텍스트 바꾸기와 이름 바꾸기를 수행 한 스크립트를 실행 한 다음 파일을 현재 디렉토리 밖으로 이동하십시오. 그래서이 스크립트에서는 여러 개의 .las 파일을 단일 이름으로 다시 작성하든 상관하지 않습니다. 나는 그것의 모든 내부 동작을 모르는, 그래서

# read a text file, replace multiple words specified in a dictionary 
# write the modified text back to a file 

import re 
import os 
import time 

# the dictionary has target_word:replacement_word pairs 
word_dic = { 
'cat' : 'kitten', 
'dog' : 'puppy' 
} 


def replace_words(text, word_dic): 
    """ 
    take a text and replace words that match a key in a dictionary with 
    the associated value, return the changed text 
    """ 
    rc = re.compile('|'.join(map(re.escape, word_dic))) 
    def translate(match): 
     return word_dic[match.group(0)] 
    return rc.sub(translate, text) 

def scanFiles(dir): 
    for root, dirs, files in os.walk(dir): 
     for file in files: 
      if '.las' in file: 
      # read the file 
       fin = open(file, "r") 
       str2 = fin.read() 
       fin.close() 
      # call the function and get the changed text 
       str3 = replace_words(str2, word_dic) 
      # write changed text back out 
       fout = open(file, "w") 
       fout.write(str3) 
       fout.close() 
       #time.sleep(1) 



scanFiles('') 

나는 온라인 예에서 함께 스크립트를 붙여, 그래서 누군가가이 스크립트가하고있는 일을 더 우아한/효율적인 방법이 있다면, 나는 문을 열어주는 말들 그것을 바꾼다.

+1

: 각 * .las는 가까운 animals.las을 animals.las에 파일을, 그리고? 같은 이름의 여러 파일로 끝내려고하십니까? 이게 어떻게 작동할까요? –

+0

수정하십시오. 이것은 하나의 .las 파일에서 드래그하고 스크립트를 실행 한 다음 문자열과 파일 이름을 수정 한 .las 파일을 다시 다른 디렉토리에 저장하는 작업 디렉토리입니다. 그래서 여러 파일 문제는 문제가되지 않습니다. –

답변

2

* .las의 내용이있는 animals.las라는 단일 파일로 끝내려면 scanFiles 함수를 변경하여 루프의 시작 부분에서 animals.las를 열고 다음과 같은 번역 된 출력을 작성하십시오. 당신은`animals.las` 현재 디렉토리에있는 모든`* .las` 파일의 이름을 바꾸려면

def scanFiles(dir): 
    fout = open("animals.las", "w") 
    for root, dirs, files in os.walk(dir): 
     for file in files: 
      if '.las' in file: 
      # read the file 
       fin = open(file, "r") 
       str2 = fin.read() 
       fin.close() 
      # call the function and get the changed text 
       str3 = replace_words(str2, word_dic) 
      # write changed text back out 
       fout.write(str3) 
       #time.sleep(1) 
    fout.close() 
+0

'.las' 파일의 대체 단어가 이미 작동 중입니다. '* .las'가'animals.las'로 이름을 바꾸는 데 어려움을 겪고 있습니다. 스크립트가 실행되기 전에'animals.las'는 존재하지 않으며 무작위'* .las' 파일 만 존재합니다. 앞서 언급했듯이 디렉토리에서'.las' 파일의 이름을'animals.las'로 변경합니다. 이것은 ** 나를 위해 ** 완전히 괜찮습니다. –

+0

알았어, 내 사과, cnauroth. 당신은 실제로 새로운 파일을 즉석에서 생성하여 문제를 해결했습니다 (이 모든 것에 익숙하지 않아서 그 부분을 이해하지 못했습니다). 나는 당신의 수정 코드를 내 코드에 넣었고 원래'* .las' 파일을'animals.las' 파일에 두 번 쓴 것 외에는 효과가있었습니다. 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까? 오! 그것은 새로 생성 된'animals.las'를 반복하므로 파일은 두 번 쓰여집니다. 그럼에도 불구하고,이 반복을 한 번만하면 어떻게 될까요? –

관련 문제