Перевести путь SVN в путь локальной файловой системы в Python

Я пишу утилиту на Python, которая будет прикреплять измененные файлы в Subversion к электронному письму и отправлять его, когда подмножество папок, находящихся под контролем версий в SVN, было изменено. Я использую библиотеку pysvn для доступа к репозиторию.

У меня есть копии файлов в моей локальной файловой системе, и я делаю обновление, чтобы проверить, изменились ли файлы с момента последнего запуска утилиты.

Я нахожусь в точке, где я переводю имена путей в SVN в имена путей в моей локальной копии.

В настоящее время я написал следующее, чтобы выполнить эту работу:

def formatPaths(self, paths):
    newPaths = list()
    for path in paths:
        path = path[len(self.basePath):]
        path = path.replace("/", "\\")
        newPaths.append(path)
    return newPaths

self.basePath будет чем-то вроде «/ trunk / project1», и я просто хочу получить относительный путь к подмножеству папок (т.е. folder1 в «/ trunk / project1»).

Это хороший способ решить эту проблему или я пропустил какую-то волшебную функцию?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 271
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Хм ... Вот бы это было:

baselen = len(self.basePath)
for path in paths:
    path = path[baselen:].replace("/", "\\")
    newPaths.append(path)
return newPaths

Если хотите, можете сделать это так:

baselen = len(self.basePath)
return (path[baselen:].replace("/", "\\") for path in paths)

Не вычислять baselen на каждой итерации цикла также является хорошей практикой.

Ответ принят как подходящий

Оставайтесь с оператором среза, но не изменяйте переменную цикла внутри цикла. для удовольствия попробуйте выражение генератора (или оставьте listcomp).

baselen = len(self.basePath)
return (path[baselen:].replace("/", "\\") for path in paths)

Обновлено: lstrip () здесь не актуален. Из руководство по эксплуатации:

str.lstrip([chars])

Return a copy of the string with leading characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the beginning of the string this method is called on.

Ваше конкретное решение для копии имени пути является разумным, но ваше общее решение всей проблемы может быть улучшено.

Я бы использовал easy_install anyvc, библиотеку, разработанную для PIDA IDE, который представляет собой унифицированный интерфейс Python для систем управления версиями, и использовал бы ее вместо этого:

from anyvc import Subversion
vc = Subversion('/trunk')

modified = [f.relpath for f in vc.list() if f.state != 'clean']

for f in modified:
    print f.relpath # the relative path of the file to the source root

Кроме того, я бы, вероятно, прикрепил различие к электронному письму, а не к фактическому файлу. Но я думаю, это твой выбор.

Я тоже думал о разнице, но, к сожалению, это не в моих силах.

Jesse Dearing 30.10.2008 16:48

Другие вопросы по теме