Python 문자열 처리 실례 상세 설명
1.여러 구분자 가 들 어 있 는 문자열 을 분리 합 니 다.
1.여러 구분자 가 들 어 있 는 문자열 을 어떻게 나 눕 니까?
문제:우 리 는 어떤 문자열 을 구분자 기호 에 따라 다른 필드 로 나 누 어야 합 니 다.이 문자열 은 여러 가지 구분자 가 포함 되 어 있 습 니 다.예 를 들 어:
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
그 중t 는 모두 구분자 인 데 어떻게 처리 합 니까?방법 1:str.split()방법 을 연속 으로 사용 하여 매번 분리 기 호 를 처리 합 니 다.
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
def mySplit(s,ds):
res = [s]
for d in ds:
t = []
map(lambda x: t.extend(x.split(d)), res)
res = t
return res
print mySplit(s,';|,\t')
:
['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
방법 2:정규 표현 식 의 re.split()방법 을 사용 하여 문자열 을 한꺼번에 나 눕 니 다.
import re
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
print re.split(r'[;|,\t]+',s)
:
['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
2.문자열 의 텍스트 형식 조정1.문자열 a 가 문자열 b 로 시작 하거나 끝 날 지 여 부 를 어떻게 판단 합 니까?
문제:한 파일 시스템 디 렉 터 리 아래 에 일련의 파일 이 있 습 니 다.a.py,quicksort.c,stack.cpp,b.sh,프로그램 을 작성 하여 모든.sh 파일 과.py 파일 에 사용자 가 실행 할 수 있 는 권한 을 추가 합 니까?
솔 루 션:문자열 에 있 는 str.startswith()와 end.startswith()방법 을 사용 합 니 다.(주의:여러 개의 일치 하 는 매개 변 수 는 원 그룹 을 사용 합 니 다)
In [1]: import os
# .sh .py
In [2]: [name for name in os.listdir('.') if name.endswith(('.py','.sh'))]
Out[2]: ['b.sh', 'a.py']
In [3]: import stat
# a.py
In [4]: os.stat('a.py').st_mode
Out[4]: 33204
# 8 ,
In [5]: oct(os.stat('a.py').st_mode)
Out[5]: '0100664'
# ,
In [6]: os.chmod('a.py',os.stat('a.py').st_mode | stat.S_IXUSR)
In [7]: ll
total 0
-rwxrw-r-- 1 yangyang 0 5 9 14:48 a.py*
-rw-rw-r-- 1 yangyang 0 5 9 14:48 b.sh
-rw-rw-r-- 1 yangyang 0 5 9 14:48 quicksort.c
-rw-rw-r-- 1 yangyang 0 5 9 14:48 stack.cpp
2.문자열 의 텍스트 형식 을 어떻게 조정 합 니까?문제:한 소프트웨어 의 log 파일 중 날짜 형식 은"yyy-mm-dd"입 니 다.
2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
2017-05-08 09:12:48 startup packages configure
09:12:48 startup packages configure
우 리 는 그 중의 날 짜 를 미국 날짜 의 형식 인'mm/dd/yyy'로 바 꾸 고 싶 습 니 다.2017-05-08==>05/08/2017 은 어떻게 처리 해 야 합 니까?솔 루 션:정규 표현 식 re.sub()방법 으로 문자열 을 교체 하고 정규 표현 식 캡 처 그룹 을 이용 하여 각 부분의 내용 을 캡 처 하여 문자열 에서 각 그룹의 캡 처 순 서 를 조정 합 니 다.
In [1]: import re
In [2]: log = open('/var/log/dpkg.log').read()
# (\d{4}) 4 , 1。 \1 ,r
In [3]: print re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1', log)
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 startup packages configure
# ,
In [5]: print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>', log)
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2
05/08/2017 09:12:48 startup packages configure
문자열1.여러 개의 작은 문자열 을 큰 문자열 로 연결 하 는 방법
문제:프로그램 에서 우 리 는 각 매개 변 수 를 순서대로 목록 에 수집 합 니 다.["<0112","<32>","<1024 x768>","<60>"]각 매개 변 수 를 데이터 신문 으로 연결 하여 보 내야 합 니 다."<0112><32><1024 x768><60>"
해결 방안:
방법 1:반복 목록,연속 으로"+"동작 을 사용 하여 모든 문자열 을 순서대로 연결 합 니 다.
In [1]: pl = ["<0112>", "<32>","<1024x768>","<60>" ]
In [2]: s = ''
# ,
In [3]: for p in pl:
...: s = s + p
...: print s
...:
<0112>
<0112><32>
<0112><32><1024x768>
<0112><32><1024x768><60>
In [4]: s
Out[4]: '<0112><32><1024x768><60>'
방법 2:str.join()방법 을 사용 하여 목록 의 모든 문자열 을 빠르게 연결 합 니 다.
In [5]: ''.join(pl)
Out[5]: '<0112><32><1024x768><60>'
목록 l=[abc,123,45,xyz]이 있 습 니 다.123 과 45 를 문자열 로 연결 하 는 방법 입 니 다.
In [6]: l = ['abc',123,45,'xyz']
# ,
In [7]: (str(x) for x in l)
...:
Out[7]: <generator object <genexpr> at 0x7fe3cadef550>
In [8]: ''.join(str(x) for x in l)
Out[8]: 'abc12345xyz'
4.문자열 가운데 정렬1.문자열 을 왼쪽,오른쪽,가운데 정렬 하 는 방법
문제:어떤 사전 에 일련의 속성 값 이 저장 되 어 있 습 니 다.
{
"loDist":100.0,
"smartCull":0.04,
"farclip":477
}
프로그램 에서 깔끔 한 형식 으로 출력 하려 면 어떻게 처리 합 니까?해결 방안:
방법 1:문자열 의 str.ljust(),str.rjust(),str.center()를 사용 하여 진행 하고 오른쪽,가운데 정렬 합 니 다.
방법 2:format 방법 을 사용 하여'<20','>20','^20'과 같은 매개 변 수 를 전달 하여 같은 작업 을 수행 합 니 다.
In [1]: s = 'abc'
In [2]: s.ljust(20)
Out[2]: 'abc '
In [3]: s.ljust(20,'=')
Out[3]: 'abc================='
In [4]: s.center(20)
Out[4]: ' abc '
In [5]: format(s,'<20')
Out[5]: 'abc '
In [6]: d = {
...: "loDist":100.0,
...: "smartCull":0.04,
...: "farclip":477
...: }
In [7]: d.keys()
Out[7]: ['loDist', 'smartCull', 'farclip']
In [8]: w =max(map(len,d.keys()))
In [9]: for k in d:
...: print k.ljust(w),':',d[k]
...:
loDist : 100.0
smartCull : 0.04
farclip : 477
2.불필요 한 문자열 삭제질문:
1.사용자 가 입력 한 앞 뒤 공백 문 자 를 걸 러 냅 니 다.'[email protected] '
2.윈도 우즈 에서 편집 한 텍스트 의'\r':'hello world\\r'를 필터 합 니 다.
3.텍스트 에 있 는 유 니 코드 조합 기호(음조)지우 기:u'zǒu'
해결 방안:
방법 1:문자열 strip(),lstrip(),rstrip()방법 으로 문자열 양쪽 문 자 를 제거 합 니 다.
방법 2:하나의 고정 위치 문 자 를 삭제 하고 절편+연결 방식 을 사용 할 수 있 습 니 다.
방법 3:문자열 의 replace 방법 이나 정규 표현 식 re.sub()방법 으로 임의의 위치 문 자 를 삭제 합 니 다.
방법 4:문자열 translate()방법,다양한 문 자 를 동시에 삭제 할 수 있 습 니 다.
In [1]: s = ' abc 123 '
In [2]: s.strip()
Out[2]: 'abc 123'
In [3]: s.lstrip()
Out[3]: 'abc 123 '
In [4]: s = '-----ab+++++'
In [5]: s.strip('-+')
Out[5]: 'ab'
In [6]: s = 'abc:123'
In [7]: s[:3]+s[4:]
Out[7]: 'abc123'
In [8]: s = '\tabc\t123\txyz'
# \t
In [9]: s.replace('\t','')
Out[9]: 'abc123xyz'
In [10]: s = '\tabc\t123\txyz\ropq\r'
In [11]: import re
# \t\r
In [12]: re.sub('[\t\r]','',s)
Out[12]: 'abc123xyzopq'
In [13]: s = 'abc\refg
\2342\t'
# \t\r
In [14]: s.translate(None,'\t\r
')
Out[14]: 'abcefg\x9c2'
In [15]: u = u'zǒu'
In [16]: u
Out[16]: u'z\u01d2u'
In [17]: print u.translate({0x01d2:None})
zu
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.