Есть как минимум пять вопросов:
os.walk
будет возвращать имена файлов Unicode, если передан путь Unicode. from __future__ import unicode_literals
будет по умолчанию использовать строки в Unicode. result
все еще существует и имеет ссылку на последний открытый файл. os.path.join
для root
и file
для имени до и после. os.walk
с topdown=False
. Сначала будут обработаны конечные узлы, поэтому дерево каталогов не будет повреждено (и сохранится root
и dirs
действительными) при его обходе. Результат:
from __future__ import unicode_literals
# Skipping unchanged code...
for root, dirs, files in os.walk('./input_folder'):
for dir in dirs:
# One way to ensure the file is closed.
with open(os.path.join(root,dir) + '/ABC ' + str(random.randint(100,999)) + '.dat','w'):
pass
with open(os.path.join(root,dir) + '/XYZ-ABC ' + str(random.randint(100,999)) + '.dat','w'):
pass
#--------------------------------------
# Main rename code
for root, dirs, files in os.walk('./input_folder',topdown=False):
for file in files:
if file.endswith((".dat")):
# Generate the full file path names.
filename1 = os.path.join(root,file)
filename2 = os.path.join(root,file.replace('ABC', '\u2714'))
os.rename(filename1,filename2)
for d in dirs:
# Generate the full directory path names.
dirname1 = os.path.join(root,d)
dirname2 = os.path.join(root,d.replace('ABC', '\u2714'))
os.rename(dirname1,dirname2)
Например:
PSKILL NOTEPAD >output.txt 2>&1
Это направит stdout и stderr к имени файла output.txt.
функции See Underused пакетных файлов Windows для получения дополнительной информации.
Это должно работать в Win32, также.
, Если Вы уже перенаправили stdout и хотите stderr, перенаправленный в тот же файл, необходимо использовать 2> & специальная форма, вместо того, чтобы просто указать тот же файл дважды. Иначе Вы получите "файл занятая" ошибка.