<질문>
파일에서 문자열을 검색하는 간단한 파이썬 코드가 있습니다.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=
?
<답변1>
시작Python 3.9
, 당신이 사용할 수있는removeprefix
:
'Path=helloworld'.removeprefix('Path=')
# 'helloworld'
<답변2>
문자열이 고정 된 경우 다음을 사용할 수 있습니다.
if line.startswith("Path="):
return line[5:]
이것은 문자열의 위치 5부터 모든 것을 제공합니다 (문자열도 시퀀스이므로 이러한 시퀀스 연산자도 여기서 작동합니다).
또는 처음에 선을 분할 할 수 있습니다.=
:
if "=" in line:
param, value = line.split("=",1)
그런 다음 param은 "Path"이고 value는 첫 번째 = 이후의 나머지입니다.
<답변3>
# ...
if line.startswith(prefix):
return line[len(prefix):]
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
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
<답변4>
def remove_prefix(text, prefix):
return text[len(prefix):] if text.startswith(prefix) else text
<답변5>
슬라이싱 (조건부 또는 비 조건부)의 경우 일반적으로 동료가 최근 제안한 것을 선호합니다. 빈 문자열로 대체를 사용하십시오. 코드를 더 쉽게 읽을 수 있고 코드가 적고 (때때로) 잘못된 문자 수를 지정할 위험이 줄어 듭니다. 확인; 저는 Python을 사용하지 않지만 다른 언어에서는이 방법을 선호합니다.
rightmost = full_path.replace('Path=', '', 1)
또는-이 게시물에 대한 첫 번째 댓글에 대한 후속 조치-이 작업 만 수행해야하는 경우줄이 시작되면와Path
:
rightmost = re.compile('^Path=').sub('', full_path)
위에서 제안 된 것 중 일부와의 주요 차이점은 관련된 "매직 넘버"(5)가 없으며 둘 다 지정할 필요가 없다는 것입니다.5
'과문자열 'Path=
즉, 코드 유지 관리 관점에서이 접근 방식을 선호합니다.
<답변6>
나는 선호한다pop
인덱싱[-1]
:
value = line.split("Path=", 1).pop()
...에
value = line.split("Path=", 1)[1]
param, value = line.split("Path=", 1)
<답변7>
아니면 왜 안돼
if line.startswith(prefix):
return line.replace(prefix, '', 1)
<답변8>
어때 ..
>>> line = r'path=c:\path'
>>> line.partition('path=')
('', 'path=', 'c:\\path')
이 삼중 항은head, separator, and tail.
<답변9>
제가 생각할 수있는 가장 간단한 방법은 슬라이싱입니다.
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을 사용하세요.
<답변10>
>>> import re
>>> p = re.compile(r'path=(.*)', re.IGNORECASE)
>>> path = "path=c:\path"
>>> re.match(p, path).group(1)
'c:\\path'
<답변11>
line[5:]
처음 5 개 이후의 문자를 제공합니다.
<답변12>
여기에 언급되지 않은 또 다른 간단한 한 줄 :
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])
""
<답변13>
line[5:]
원하는 부분 문자열을 제공합니다. 검색introduction'슬라이스 표기법'을 찾습니다.
<답변14>
목록 이해력을 알고있는 경우 :
lines = [line[5:] for line in file.readlines() if line[:5] == "Path="]
<답변15>
이스케이프와 함께 정규식을 사용하지 않는 이유는 무엇입니까?^
줄의 처음 부분과 일치하고re.MULTILINE
각 줄에서 일치합니다.re.escape
일치가 정확한지 확인합니다.
>>> print(re.sub('^' + re.escape('path='), repl='', string='path=c:\path\nd:\path2', flags=re.MULTILINE))
c:\path
d:\path2
<답변16>
다음 코드 시도
if line.startswith("Path="): return line[5:]
<답변17>
removeprefix()
과removesuffix()
추가 된 문자열 메서드파이썬 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']
<답변18>
팝 버전이 옳지 않았습니다. 나는 당신이 원한다고 생각합니다 :
>>> print('foofoobar'.split('foo', 1).pop())
foobar
<답변19>
당신이 정확히 찾고있는 것 같아요
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
<답변20>
함수를 작성할 필요없이 목록에 따라 분할됩니다.이 경우에는 'Mr. | Dr. | Mrs.', 분할 후 모든 항목을 [1]로 선택한 다음 다시 분할하여 원하는 요소를 가져옵니다. 아래의 경우 '모리스'가 반환됩니다.
re.split('Mr.|Dr.|Mrs.', 'Mr. Morgan Morris')[1].split()[1]
<답변21>
이것은 다른 답변과 매우 유사하지만 반복되는 문자열 작업이 없으며 접두사가 있는지 여부를 알 수 있으며 여전히 읽기 쉽습니다.
parts = the_string.split(prefix_to_remove, 1):
if len(parts) == 2:
# do things with parts[1]
pass
<답변22>
아래 방법을 시도해 볼 수 있습니다.
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)
'개발 > Python' 카테고리의 다른 글
IPython Notebook Server 3에서 함수 인수를 어떻게 볼 수 있습니까? (0) | 2021.02.07 |
---|---|
Python-루트 프로젝트 구조의 경로 가져 오기 (0) | 2021.02.07 |
[파이썬] Pandas DataFrame에 tsv 파일을로드하는 방법은 무엇입니까? (0) | 2021.01.21 |
파이썬 Django의 그룹에 사용자 추가 (0) | 2021.01.21 |