Python 문자열 처리 실례 상세 설명

8939 단어 Python문자열
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
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기