2016-04-13 2 views
0

Я новичок в python (и вообще в кодировке), и мне не удалось найти решение моей конкретной проблемы в Интернете. В настоящее время я создаю инструмент, который позволит пользователю сохранять файл в сетевом расположении. Файл будет иметь номер версии. Я бы хотел, чтобы версия автозапуска скрипта была сохранена до ее сохранения. У меня остальная часть скрипта выполнена, но это автоматическое управление версиями, с которыми у меня возникают проблемы. Вот то, что я до сих пор:Как я могу изменить часть имени файла с помощью python

import re 
import os 

def main(): 
    wip_folder = "L:/xxx/xxx/xxx/scenes/wip/" 
    _file_list = os.listdir('%s' % wip_folder) 

    if os.path.exists('%s' wip_path): 
     for file in _file_list: 
      versionPattern = re.compile('_v\d{3}') 
      curVersions = versionPattern.findall('%s' % wip_folder) 
      curVersions.sort() 
      nextVersion = '_v%03d' % (int(curVersions[-1][2:]) + 1) 
     return nextVersion 
    else: 
     nextVersion = '_v001' 

    name = xxx_xxx_xx 
    name += '%s' nextVersion 
    name += '_xxx_wip 

Я, вероятно, следует отметить, что основной() будет вызываться с QPushButton в другом модуле. Кроме того, этот wip_path, скорее всего, будет содержать несколько версий одного файла. Поэтому, если в wip_path есть 10 версий этого файла, это сохранение должно быть v011. Прошу прощения, если этот вопрос не имеет смысла. Любая помощь будет оценена по достоинству. Спасибо!

+0

Непонятно, какие проблемы у вас есть. Вы только пытаетесь определить, как найти предыдущие версии и правильно назвать новую? – TheLazyScripter

+0

в основном, да. Мне нужно пройти через папку wip, чтобы найти самый высокий номер версии. Затем мне нужно добавить 1 к номеру версии этой версии, чтобы получить строку, которую я сохраняю в переменной nextVersion. Затем я придерживаюсь этого окончательного соглашения об именах. В принципе, если мой каталог WIP имеет ex_v001.doc ex_v002.doc ex_v003.doc в нем, я хочу, чтобы мой следующий сохранить, чтобы быть названным: ex_v004.doc – shagler

+0

Вам только нужно скомпилировать регулярное выражение один раз, вне цикла. Ваш вопрос * делает * имеет смысл кстати. но неясно, какова ваша проблема. Каков ваш текущий выход? Как это не работает в данный момент? – jDo

ответ

0

Вам не нужно использовать re вообще, программирование - это упрощение, и вы слишком усложняете его! Я решил вернуться, но что-нибудь в этой функции может быть изменено на все, что вам нужно, чтобы это сделать специально! Просто прочитайте комментарии и удачи!

def getVersioning(path): 
    #passing path 

    count = 1 #init count 
    versionStr = 'wip_path_v' 
    try: #in case path dosen't exist 
     for i in os.listdir(path): #loop thorough files in passed dir 
      if versionStr in i: #check if files contain default versioning string e.g. wip_path_V or any other (used in case other files are in the same dir) 
       count += 1 #incriment count 
    except: 
     os.mkdir(path) #makedir if one does not exist for future use 

    newName = versionStr + str(count) #new versioning file name 
    return newName #return new versioning name 

print getVersioning('tstFold') 
+0

Спасибо за ваш ответ! Я попробую это решение, как только смогу. Я дам вам знать, как все идет! – shagler

+0

это сработало! Ты великолепен. Спасибо! – shagler

+0

Рад, что я мог помочь! – TheLazyScripter