파이썬에서 문자열 기능을 검색하고 바꾸기를 원합니다. 다음 코드를 작성했지만 주요 문제는 목록을 튜플로 변환하는 것입니다. 나는 두 개의 루프에서 그것을 깨달았지만 튜플을 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
을 만들었습니다. 이 코드는 잘 작동하지만 마지막에 나는 두 개의 추가 질문이 :
포장을 풀고 비밀 변수없이 위의 코드를 단순화 할 수 있습니까? 다른 말로하면 튜플 목록에서
startswith
함수로 직접 튜플을 전달하는 방법은 무엇입니까?이 경우 문자열을 검색하고 바꿀 수있는 다른 방법이 있습니까?
ps. 당신은 아마 대신 직접 쿼리의 결과를 반복 할 수 또한
rcsv_tuple = sum(rcsv_list,())
: 당신은 루프와 튜플의 건설을 대체 할 수>Cursor.fetchall()
튜플의 목록을 만들려면'any (e.startswith (tup) in eup for tup)'도 사용하십시오. 단지'list (tup)'를 수행하십시오 – dawg