2014-03-24 3 views
1

파이썬에서 문자열 기능을 검색하고 바꾸기를 원합니다. 다음 코드를 작성했지만 주요 문제는 목록을 튜플로 변환하는 것입니다. 나는 두 개의 루프에서 그것을 깨달았지만 튜플을 startswith 함수에 전달하는 더 쉬운 방법을 알려줄 수 있습니까?단일 튜플을 튜플 목록에서 startswith 함수로 쉽게 전달하는 방법은 무엇입니까?

RMAN configuration parameters for database with db_unique_name TEST are: 
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS; 
CONFIGURE BACKUP OPTIMIZATION OFF; # default 
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 
CONFIGURE CONTROLFILE AUTOBACKUP ON; 
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET; 

상기 코드의 주요 아이디어는 startswith 함수에 rman_config 문자열 일치 검색 튜플을 전달하는 것이다

rman_config = (''' 
RMAN configuration parameters for database with db_unique_name TEST are: 
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 
CONFIGURE BACKUP OPTIMIZATION OFF; # default 
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default 
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default 
''') 

rcsv_list = [('RETENTION POLICY', 'TO RECOVERY WINDOW OF 5 DAYS'), 
      ('CONTROLFILE AUTOBACKUP', 'ON'), 
      ('DEVICE TYPE', 'DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET')] 

# unpack list of tuples to a single list 
rcsv_tmp_list = [] 
for l in rcsv_list: 
    for t in l: 
     rcsv_tmp_list.append(t) 

# convert list to tuple 
rcsv_tuple = tuple(rcsv_tmp_list) 

i = 0 

for line in rman_config.splitlines(): 
    if line.startswith(rcsv_tuple, 10): 
     line = 'CONFIGURE ' + rcsv_tuple[i] + ' ' + rcsv_tuple[i+1] + ';' 
     i += 2 
     print(line) 
    else: 
     print(line) 

출력 (리스트는 rcsv_list 변수이다). 이를 위해 튜플 타입의 변수 rcsv_tuple을 만들었습니다. 이 코드는 잘 작동하지만 마지막에 나는 두 개의 추가 질문이 :

  1. 포장을 풀고 비밀 변수없이 위의 코드를 단순화 할 수 있습니까? 다른 말로하면 튜플 목록에서 startswith 함수로 직접 튜플을 전달하는 방법은 무엇입니까?

  2. 이 경우 문자열을 검색하고 바꿀 수있는 다른 방법이 있습니까?

ps. 당신은 아마 대신 직접 쿼리의 결과를 반복 할 수 또한

rcsv_tuple = sum(rcsv_list,()) 

: 당신은 루프와 튜플의 건설을 대체 할 수>Cursor.fetchall()

+0

튜플의 목록을 만들려면'any (e.startswith (tup) in eup for tup)'도 사용하십시오. 단지'list (tup)'를 수행하십시오 – dawg

답변

1

- 때문에 나는 항상 튜플의 목록으로 rcsv_list 변수를 가져올

마지막으로 조건과 독립적으로 인쇄 할 때 else 절을 ​​제거 할 수 있습니다.

+0

위대한 !! 나는 이런 똑똑한 해결책을 좋아합니다. :) 고맙습니다. – Scottie

관련 문제