Удаление строки в python без удаления повторяющихся символов

Я печатаю имя папки в текстовый файл, содержащий данные, и хочу удалить внешние папки из строки. Например, он печатает C:\A3200\201808101040, но я хочу напечатать 201808101040. Когда я использую str(os.getcwd().strip('C:\\A3200\\')) для удаления внешних папок из печати, программа возвращает 180810104, что странно, потому что некоторые нули удалены, а некоторые нет и т. д. (Она удалила начало 20 и окончание 0.)

Я знаю, что это можно сделать, задав имя папки другим способом, чем os.getcwd(), но меня интересует этот метод манипуляции строками в будущем.

Как удалить определенную строку символов в полной строке, не затрагивая символы, которые повторяются позже в полной строке?

os.path.basename ("C:\A3200\201808101040")?
user6767685 10.08.2018 16:55

Это может сработать, но я хотел бы знать на будущее, как просто сделать это по строкам, на случай, если мне нужно удалить что-то еще, например «груша» из «грушевого дерева» и т. д., Где «е» находится в обоих слова

elarr 10.08.2018 16:57

my-string.replace ('pear', '') извлечет "грушу" из грушевого дерева

mstorkson 10.08.2018 16:58

Можно прояснить этот вопрос? Мне кажется, что в комментариях с разными ответами задается несколько вопросов. Чего вы пытаетесь достичь? Вы можете перейти мост «грушевое дерево», когда вам нужно убрать слово «груша» из фразы «грушевое дерево».

user6767685 10.08.2018 17:02

Я думаю, что возникает один вопрос: как удалить определенную строку символов из полной строки, не затрагивая символы, которые повторяются позже в полной строке? Для примера с каталогом файлов могут быть разные способы сделать это, я хочу сделать это точно так же, как и для примера с грушевым деревом.

elarr 10.08.2018 17:04
0
5
61
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Strip берет задавать символов и удаляется с обеих сторон, пока не встретит символ, не входящий в набор. Вот почему он ест ваши 2 и 0, но не 1. Вам, вероятно, повезет больше с os.getcwd().split(os.sep)[-1].

a=r"C:\A3200\201808101040" # make sure you read it raw
a[a.rindex("\\")+1:] #'201808101040'

ИЛИ

Если вам просто нужно разделить 'C: \ A3200' и '201808101040'

a=r"C:\A3200\201808101040"
a.rsplit("\\",1)[1] #'201808101040'
a.rsplit("\\",1)[0] #'C:\A3200'
Ответ принят как подходящий

That may work, but I would like to know for future reference how to just do it string-wise, in case I need to remove something else like "pear" from "pear tree", etc. where the "e" is in both words

Вы могли бы сделать 'pear tree'.replace('pear', '', 1).strip()

Ответ на этот конкретный вопрос - использование os.path.basename().

Что касается вашего более широкого вопроса: "Как удалить определенную строку символов в полной строке, не затрагивая символы, которые повторяются позже в полной строке?"

Я бы подумал об использовании регулярного выражения (regex). Это позволяет вам указывать положительные и отрицательные прогнозы вперед / назад и многие другие полезные приемы. В вашем случае здесь я бы рассмотрел searching строкой вместо фактического замена любых символов в строке. Вот пример регулярного выражения для вашего вопроса:

import re

s = r'C:\A3200\201808101040'

matches = re.findall(r'[0-9]+', s)

print(matches)

Урожайность:

['3200', '201808101040']

Очевидно, что в этом случае вас интересует окончательное совпадение, возвращаемое в matches, поэтому вы можете получить к нему доступ через matches[-1], который дает 201808101040.

ОП беспокоит 3200? Разве это не должно быть A3200, ведь это часть пути

mad_ 10.08.2018 17:03

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