Как я могу изменить этот скрипт, чтобы включить функцию переименования - PullRequest
1 голос
/ 14 июня 2011

У меня есть текущий скрипт, включенный ниже, который входит в файл с расширением .las и заменяет определенные строки другими (например: cat -> kitten, dog -> puppy).

Все, что я хочу, эточтобы добавить в этот скрипт функциональность, которая переименовала бы ЛЮБОЙ файл .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 Ответ

2 голосов
/ 14 июня 2011

Если вы хотите получить единственный файл с именем animals.las, содержащий содержимое * .las, то вы можете изменить функцию scanFiles, чтобы она открывала animals.las в начале цикла, записывая переведенный вывод каждого * .las файл для animals.las, а затем закройте animals.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()
...