2013-04-12 2 views
1

그래서 사전에있는 각 키의 이름을 가진 파일을 생성하는 스크립트가 있습니다. (아래 스크립트)Python - 생성시 사용자 정의 파일 생성

for key, values in sequencelist.items(): 
    with open(key, 'w') as out: 
     for value in values: 
      out.write('\n'.join(value.split()) + '\n') 

위의 구문을 수정하여 도움을 줄 수 있습니까? 파일 이름에 일반 텍스트를 추가하고 현재 len(dict.keys())을 사용하여 추가하겠습니다. range() 아래 스크립트를 참조하십시오. :)

for key, values in sequencelist.items(): 
    for i in range(len(sequencelist.keys())): 
     j = i+1 
     with open('OTU(%j)' +'_' + key +'.txt' %j, 'w') as out: 
      for value in values: 
       out.write('\n'.join(value.split()) + '\n') 

그래서이 OTU 될 만든 첫 번째 파일 (1) _ key

된 .txt 나는 with open() 라인이 100 % 잘못 확신합니다.

다른 사람이 나에게 물건을 연결하여 %j의 변수를 호출하기 전에 j을 사용하여 작업하기 전에 읽을 수 있습니까? 이 오버플로 코드 (Input a text file and write multiple output files in Python)의 코드를 설명없이 사용하려고했습니다.

+0

링크 된 질문의 코드가 형식 (정수)과 인쇄 할 값의 이름으로 'i'를 사용했기 때문에 '% j'에 대한 혼란이 발생했을 가능성이 큽니다. 이 형식의 문자열 서식은 [이 문서] (http://docs.python.org/2/library/stdtypes.html#string-formatting)를 참조하십시오. 형식을 지정하려면 [다른 방법] (http://docs.python.org/2/library/stdtypes.html#str.format)이 있습니다. –

답변

1

는 시도 당신이 각 값에 대해 len(sequencelist) 파일을하지 않도록 나는 당신의 가치 반복하여 공모의 순서를 교환

for count, (key, values) in enumerate(sequencelist.items()): 
    with open('OTU(%d)_%s.txt' % (count+1, str(key)), 'w') as out: 
     for value in values: 
      out.write('\n'.join(value.split()) + '\n') 

다음과 같습니다. 이번 변경 이후 귀하의 j 인수가 필요하지 않은 것으로 보입니다. 열거 형 호출은 루프가 반복 될 때마다 for 루프의 카운트 부분을 증가시킵니다 (카운트를 호출 할 필요는 없습니다).

%d은 정수를 요구 str()로 잘 변환합니다 키 이름에 따라 문자열의 %s. 귀하의 키가 사용자 정의 클래스 인 경우 <class __main__.Test at 0x00000....>과 같은 someting을 얻으므로보다 멋진 문자열 형식으로 변환해야합니다.

+0

완벽한, 나는 설명을 요구할 예정이었고 당신이 어딘가에 놓친 것을 언급했다. –

+0

Opps, 오타가 수정되었습니다. 또한 sequencelist가 실제로 길지 않는 한'range (len (sequencelist.keys())'를'range (len (sequencelist))'로 단축 할 수 있습니다. – Pyrce

+0

그래서 나는 그것을 실행했습니다, 올바르게 작동합니다 한 부분을 제외하고 스크립트는 이제 106 개의 파일을 106 개 (총 len) 복사합니다. 어떻게 % d를 한 번만 다음 루프로 옮길 수 있습니까? 11,000 개의 파일을 생성 한 Loh –

관련 문제