У меня есть текущий script, который приведен ниже, который входит в файл с расширением .las и заменяет некоторые строки другими (например: cat → kitten, dog → puppy).
Все, что я хочу, это добавить функциональность в этот script, который переименовал бы любой файл .las в определенное имя в текущем каталоге, когда я запустил script (т.е.:.:....... → животные. LAS).
Я бы перетащил один файл в этот каталог, запустил script, который выполняет замену текста и переименование, а затем переместит файл из текущего каталога. Поэтому для этого script мне все равно, что он переписал бы несколько файлов .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('')
Я вставлял script вместе из онлайн-примеров, поэтому я не знаю всех его внутренних разработок, поэтому, если у кого-то есть более элегантный/эффективный способ делать то, что делает этот script, я открыт для меняя его.
Если вы хотите закончить одним файлом с именем animals.las, содержащим содержимое *.las, тогда вы можете изменить функцию scanFiles, чтобы открыть animals.las в начале цикла, напишите переведенный вывод каждого *.las file to 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()
.las
уже работает. У меня проблемы с получением *.las
для переименования в animals.las
. До animals.las
скрипта animals.las
не существует, существует только случайный файл *.las
. Как я уже отмечал выше, я понимаю, что это переименует любой .las
в каталоге в animals.las
. Это совершенно нормально для меня.
*.las
файл animals.las
. Любые идеи о том, как я могу это исправить? Ой! Он перебирает вновь созданный animals.las
поэтому файл записывается дважды. Тем не менее, как бы я получил эту итерацию только один раз?
*.las
в текущем каталоге вanimals.las
? Вы собираетесь получить несколько файлов с одним и тем же именем? Как это должно работать?