2014-12-18 2 views
0

그래서 난 uuid4와 함께 임의의 숫자와 문자를 생성하는 스크립트 작업을하고 있습니다. 생성 된 키는 목록에 저장되며이 목록은 "already_used.txt"라는 파일에 저장됩니다. 내 질문 :생성 된 키가 이미 파일에 존재하는지 확인

생성 된 키가 already_used 파일에 있지 않도록 확인하여 고유 키를 얻을 수있는 방법은 무엇입니까? 이 같은

import uuid 
    checklist_idfile = open('already_used.txt', 'a') 
    already_used = [] 
    def checklist(string_length=9): 
     count = 0 
     while count < 20: 
       count += 1 
       checklist_random = str(uuid.uuid4()) 
       checklist_random = checklist_random.replace("-","") 
       checklist_prefix = 'TEST_' 
       id_checklist_random = checklist_prefix + checklist_random[0:string_length] 
       print id_checklist_random 
       already_used.append(id_checklist_random) 
       checklist_idfile.write(id_checklist_random) 
       checklist_idfile.write('\n') 

생성 된 키 외모 : TEST_d1c23ba2f 대단히 감사합니다! 컬렉션의 경우 것으로,

if key in collection: do_something() 

하지만 조심 : 당신은 in 키워드 컬렉션의 키를 확인할 수 있습니다

with open("already_used.txt", "r") as used: 
    already_used = {x.rstrip() for x in used} 
if not some_key in already_used: 
    doing somethig 
    ... 
+0

실제 데이터베이스를 사용하는 것이 더 편리 할 수 ​​있습니다. sqlite3이 목적을 위해 잘 할 수 있습니다. – Evert

+0

그러나 그렇지 않으면 : 파일을 읽고 줄 바꿈을하여 문자열 목록을 얻은 다음 현재 키가 문자열 목록에 없는지 테스트하십시오. 너 그거 해봤 니? – Evert

답변

0

: 내가 제대로 질문을 이해한다면

+0

감사합니다. 정말이 문제를 해결하는 데 도움이되었습니다! – Franz

+1

정말 파일을 닫아야합니다 (이상적으로는'with' 문 사용). 하나의 파일 만 사용하고 오랫동안 실행되지 않고 아마도 CPython에서만 사용되는 빠르고 & 더러운 스크립트의 경우에는 아마 그걸 가지고 도망 갈 수 있지만, 올바른 방법으로 쉽게 할 수 있다면 왜 귀찮을까요? – abarnert

0

, 당신은 같은 것을 할 필요가 list, 오랜 시간이 걸릴 것입니다. (확인하는 모든 키에 대해 물결표를보아야합니다.)

mor

my_set = set(some_collection) 

for key in keys: 
    if key in my_set: do_something() 

이 그런 짓을, 파일에서 설정 확인하려면이 : (모든 키를 가정하는 것은 한 번에 전자 키, 당신은 비교할하려는 컬렉션에서 set을 (세트 constan, 그래서 등이있다 새 라인에서)

key_set = set([x.strip() for x in open("file.txt")]) 
+1

파일을 순회하기 만하면됩니다. 그런 다음 끝에 \ n을 벗을 필요가 없습니다. 또한 들여 쓰기가 옳지 않습니다. 마지막 세 줄은에 있어야합니다. 그리고 ... 파일 이름에 편지를 안개 낀다;). –

+0

set은 duplicates를 저장하지 않기 때문에리스트 대신 set을 사용하는 것이 좋습니다. "in"연산자 검색은 목록에 훨씬 더 빨리 설정됩니다. –

+0

@VincentBeltman, 열쇠를 얻기 위해서만 "with"가 필요하기 때문에 내 견해가 옳다. 아마도 이것이 최선의 방법이 아닐 수도 있습니다. –

관련 문제