줄의 왼쪽 부분을 제거하는 방법은 무엇입니까?
나는 파일에서 문자열을 검색하는 간단한 파이썬 코드를 가지고 있습니다. 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=
?
문자열이 고정된 경우 다음을 사용할 수 있습니다.
if line.startswith("Path="):
return line[5:]
이는 문자열의 위치 5에서 모든 것을 제공합니다(문자열도 시퀀스이므로 이러한 시퀀스 연산자도 여기서 작동합니다).
아니면 처음에 라인을 분할할 수 있습니다.=
:
if "=" in line:
param, value = line.split("=",1)
그런 다음 매개변수는 "Path"이고 값은 첫 번째 = 이후의 나머지 값입니다.
문자열에서 접두사 제거
# ...
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
ConfigParser를 사용하여 INI와 유사한 파일 구문 분석
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
기타 옵션
에서 시작Python 3.9
사용할 수 있습니다.
'Path=helloworld'.removeprefix('Path=')
# 'helloworld'
파이썬 3.9+
text.removeprefix(prefix)
모든 Python 버전:
def remove_prefix(text, prefix):
return text[len(prefix):] if text.startswith(prefix) else text
일반적으로 슬라이싱(조건부 또는 조건부)의 경우 최근 동료가 제안한 것을 선호합니다. 빈 문자열로 대체합니다.코드를 읽기 쉽고 코드(때로는)가 적으며 문자 수를 잘못 지정할 위험이 적습니다.알겠습니다. 저는 파이썬을 사용하지 않지만 다른 언어에서는 이러한 접근 방식을 선호합니다.
rightmost = full_path.replace('Path=', '', 1)
또는 - 이 게시물의 첫 번째 주석에 대한 후속 조치 - 행이 다음으로 시작하는 경우에만 수행해야 하는 경우Path
:
rightmost = re.compile('^Path=').sub('', full_path)
중 큰 은 '숫자관련되어 있지 '마법의 숫자'(5)와'마법의 숫자'를 둘 다 입니다.5
그리고 문자열 'Path=
즉, 코드 유지 관리의 관점에서 이러한 접근 방식을 선호합니다.
선호합니다pop
색인을 [-1]
:
value = line.split("Path=", 1).pop()
로.
value = line.split("Path=", 1)[1]
param, value = line.split("Path=", 1)
아니면 왜 안됩니까?
if line.startswith(prefix):
return line.replace(prefix, '', 1)
제가 생각할 수 있는 가장 간단한 방법은 슬라이싱입니다.
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을 사용하여 항목에 대해 자세히 알아보십시오.
여기서 언급되지 않은 또 다른 간단한 원라이너:
value = line.split("Path=", 1)[-1]
이는 다양한 에지 사례에서도 올바르게 작동합니다.
>>> print("prefixfoobar".split("foo", 1)[-1])
"bar"
>>> print("foofoobar".split("foo", 1)[-1])
"foobar"
>>> print("foobar".split("foo", 1)[-1])
"bar"
>>> print("bar".split("foo", 1)[-1])
"bar"
>>> print("".split("foo", 1)[-1])
""
그럼..
line = r'path=c:\path'
line.partition('path=')
출력:
('', 'path=', 'c:\\path')
이 세쌍둥이는 머리, 분리기, 꼬리입니다.
import re
p = re.compile(r'path=(.*)', re.IGNORECASE)
path = r"path=c:\path"
re.match(p, path).group(1)
출력:
'c:\\path'
line[5:]
처음 5개 이후의 문자를 제공합니다.
removeprefix()
그리고.removesuffix()
문자열 메서드는 관련 문제로 인해 Python 3.9에 추가되었습니다.lstrip
그리고.rstrip
전달된 매개 변수의 해석.자세한 내용은 PEP 616을 참조하십시오.
# in python 3.9
>>> s = 'python_390a6'
# apply removeprefix()
>>> s.removeprefix('python_')
'390a6'
# apply removesuffix()
>>> s = 'python.exe'
>>> s.removesuffix('.exe')
'python'
# in python 3.8 or before
>>> s = 'python_390a6'
>>> s.lstrip('python_')
'390a6'
>>> s = 'python.exe'
>>> s.rstrip('.exe')
'python'
removesuffix
목록이 있는 예제:
plurals = ['cars', 'phones', 'stars', 'books']
suffix = 's'
for plural in plurals:
print(plural.removesuffix(suffix))
출력:
car
phone
star
book
removeprefix
목록이 있는 예제:
places = ['New York', 'New Zealand', 'New Delhi', 'New Now']
shortened = [place.removeprefix('New ') for place in places]
print(shortened)
출력:
['York', 'Zealand', 'Delhi', 'Now']
line[5:]
당신이 원하는 부분 문자열을 줄 것입니다.서론을 검색하고 '슬라이스 표기법'을 찾습니다.
regex를 이스케이프와 함께 사용하면 어떨까요? ^
라인의 초기 부분과 일치합니다.re.MULTILINE
각 라인에 일치하는 항목. re.escape
정확한 일치를 보장합니다.
>>> print(re.sub('^' + re.escape('path='), repl='', string='path=c:\path\nd:\path2', flags=re.MULTILINE))
c:\path
d:\path2
목록 이해도를 알고 있는 경우:
lines = [line[5:] for line in file.readlines() if line[:5] == "Path="]
다음 코드를 따라 해보십시오.
if line.startswith("Path="): return line[5:]
당신이 정확히 찾고 있는 것은 이것인 것 같아요.
def findPath(i_file) :
lines = open( i_file ).readlines()
for line in lines :
if line.startswith( "Path=" ):
output_line=line[(line.find("Path=")+len("Path=")):]
return output_line
함수를 작성할 필요 없이 목록에 따라 분할됩니다. 이 경우 'Mr.|Dr.|Mrs.'는 [1]로 분할한 후 모든 항목을 선택한 다음 다시 분할하여 원하는 요소를 가져옵니다.아래의 경우 'Morris'가 반환됩니다.
re.split('Mr.|Dr.|Mrs.', 'Mr. Morgan Morris')[1].split()[1]
다음 방법을 시도할 수 있습니다.
def remove_suffix(string1, suffix):
length = len(suffix)
if string1[0:length] == suffix:
return string1[length:]
else:
return string1
suffix = "hello"
string1 = "hello world"
final_string = remove_suffix(string1, suffix)
print (final_string)
이는 다른 답변과 매우 유사하지만 반복적인 문자열 작업 없이 접두사가 있는지 여부를 구분할 수 있으며 여전히 읽을 수 있습니다.
parts = the_string.split(prefix_to_remove, 1):
if len(parts) == 2:
# do things with parts[1]
pass
언급URL : https://stackoverflow.com/questions/599953/how-to-remove-the-left-part-of-a-string
'programing' 카테고리의 다른 글
준비된 파일의 Git 목록 (0) | 2023.07.18 |
---|---|
인덱스 목록을 사용하여 행당 특정 열 인덱스를 선택하는 NumPy (0) | 2023.07.18 |
요소에 대한 유형 스크립트에서 여러 CSS 스타일 속성을 설정하는 방법은 무엇입니까? (0) | 2023.07.18 |
코코아 포드 설치: 응답 없음 (0) | 2023.07.18 |
밀도도를 만드는 방법 (0) | 2023.07.18 |