Как удалить левую часть строки?

У меня есть некоторый простой код Python, который ищет файлы строку, например. path=c:\path, где c:\path часть может варьироваться. Текущий код:

def find_path(i_file):
    lines = open(i_file).readlines()
    for line in lines:
        if line.startswith("Path="):
            return # what to do here in order to get line content after "Path=" ?

Что простой путь состоит в том, чтобы получить текст после Path=?

128
задан Boris 11 September 2019 в 23:08
поделиться

8 ответов

Если строка починена, можно просто использовать:

if line.startswith("Path="):
    return line[5:]

, который дает Вам все от позиции 5 на в строке (строка является также последовательностью так эти операторы последовательности работа здесь, также).

Или можно разделить строку в первом =:

if "=" in line:
    param, value = line.split("=",1)

Тогда параметрический усилитель является "Путем", и значение - остальные после первого =.

188
ответ дан John Zwinck 24 November 2019 в 00:34
поделиться

line[5:] даст подстроку, которую Вы хотите. Ищите введение и ищите 'нотацию части'

1
ответ дан Pete Kirkham 24 November 2019 в 00:34
поделиться

Если Вы знаете понимания списка:

lines = [line[5:] for line in file.readlines() if line[:5] == "Path="]
1
ответ дан Matthew Schinckel 24 November 2019 в 00:34
поделиться
line[5:]

дает Вам символы после первых пяти.

1
ответ дан Steven Huwig 24 November 2019 в 00:34
поделиться

Самым простым путем я могу думать, с разрезанием:

def find_path(i_file): 
    lines = open(i_file).readlines() 
    for line in lines: 
        if line.startswith("Path=") : 
            return line[5:]

А быстрое примечание по нотации части, это использует два индекса вместо обычного. Первый индекс указывает на первый элемент последовательности, которую Вы хотите включать в , часть и последний индекс сразу является индексом после последнего элемента, который Вы хотите включать в часть.
, Например:

sequence_obj[first_index:last_index]

часть состоит из всех элементов между first_index и last_index, включая first_index а не last_index. Если первый индекс опущен, он принимает значение по умолчанию к запуску последовательности. Если последний индекс опущен, он включает все элементы до последнего элемента в последовательности. Отрицательные индексы также позволяются. Используйте Google для получения дополнительной информации о теме.

4
ответ дан Boris 24 November 2019 в 00:34
поделиться
>>> import re

>>> p = re.compile(r'path=(.*)', re.IGNORECASE)

>>> path = "path=c:\path"

>>> re.match(p, path).group(1)
'c:\\path'
3
ответ дан riza 24 November 2019 в 00:34
поделиться

Для разрезания (условное выражение или неусловное выражение) в целом я предпочитаю что коллега, предложенный недавно; Используйте замену с пустой строкой. Легче прочитать код, меньше кода (иногда) и меньше риска определения неправильного количества символов. Хорошо; я не использую Python, но на других языках я действительно предпочитаю этот подход:

rightmost = full_path.replace('Path=', '', 1)

или - для следования до первого комментария к этому сообщению - если это должно только быть сделано , если строка запускается с Path:

rightmost = re.compile('^Path=').sub('', full_path)

основное различие для части из того, что было предложено выше, - то, что нет никакого "магического числа" (5) включено, ни никакая потребность определить и' 5' и строка' Path=', Другими словами, я предпочитаю этот подход с точки зрения обслуживания кода.

18
ответ дан Ioannis Filippidis 24 November 2019 в 00:34
поделиться

Удалите префикс из строки

# ...
if line.startswith(prefix):
   return line[len(prefix):]

Разделение на первом вхождении разделителя через str.partition()

def findvar(filename, varname="Path", sep="=") :
    for line in open(filename):
        if line.startswith(varname + sep):
           head, sep_, tail = line.partition(sep) # instead of `str.split()`
           assert head == varname
           assert sep_ == sep
           return tail

Синтаксический анализ подобный INI файл с ConfigParser

from ConfigParser import SafeConfigParser
config = SafeConfigParser()
config.read(filename) # requires section headers to be present

path = config.get(section, 'path', raw=1) # case-insensitive, no interpolation

Другие опции

115
ответ дан Community 24 November 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: