2015-01-15 2 views
0

에 따라, 그러나 나는 다음과 같은 작업을 위해 그것을 사용하고 싶습니다 :파이썬 : 여러 파일을 읽고 디렉토리로 이동 내가 파이썬 아주 새로운 오전 자신의 콘텐츠

  1. 디렉토리
  2. 에있는 모든 파일을 읽을 수
  3. 파일의 모든 행에서 특정 문자를 찾습니다.
  4. 이 문자가 파일에 한 번만 나타나는 경우 특정 디렉토리에있는 파일을 복사하십시오.

    #! /usr/bin/python 
    
    import glob 
    import shutil 
    
    
    
    path = '/xxxx/Dir/*.txt' 
    files=glob.glob(path) 
    for file in files:  
        f=open(file) 
        f.read() 
        total = 0 
        for line in f: 
         if "*TPR_4*" in line: 
          total_line = total + 1 
          if total_line == 1: 
           shutil.copy(f, 'xxxx/Test/') 
    f.close() 
    

    그러나, 그것은 작동하지 않습니다 :

나는 다음 코드를 시도했다. 제안 사항이 있으십니까?

+0

항상 테스트를 통과하면 복사합니까? –

+0

감사합니다. 대답은 '아니오'입니다. – efrem

답변

1

로직이 올바르지 않습니다. 또한 totaltotal_line이 혼합되어 있고 shutil.copy은 인수가 아니라 이름을 사용합니다. if .. in lineTPR_4을 검색하는 등의 구문을 사용하지 않으므로 '*TPR_4*'이 아닌 'TPR_4'을 사용하십시오. 다음을 시도하십시오.

#! /usr/bin/python  
import glob 
import shutil 

path = '/xxxx/Dir/*.txt' 
files=glob.glob(path) 
for file in files:  
    f=open(file) 
    total = 0 
    for line in f: 
     if "TPR_4" in line: 
      total += 1 
      if total > 1: 
       break # no need to go through the file any further 
    f.close() 
    if total == 1: 
     shutil.copy(file, 'xxxx/Test/') 
+0

감사합니다. 작동하지 않습니다. – efrem

+0

구체적으로 작동하지 않는 것은 무엇입니까? 내가 테스트 세트 파일에서 그것을 시도하고 그것은 내가해야한다고 이해했던 일을했다. –

+0

문자열이 TPR_4 인 행이 하나있는 파일이 있습니다. Dir 폴더에는 .txt 파일이 더 있습니다. 나는 그것을 실행하고 Test 폴더가 비어있다. 위에서 언급 한 파일이 있어야한다. – efrem

2

shutil.copy()은 파일 이름을 열린 파일이 아닌 인수로 취합니다.

shutil.copy(file, 'xxxx/Test/') 

는 또한 : file 가난한 이름 선택 당신은 당신의 전화를 변경해야합니다. 내장 함수의 이름입니다.

+0

감사합니다.하지만 여전히 작동하지 않습니다. – efrem

0

질문을위한 코드를 작성했습니다. 아마도 도움이 될 것입니다.

import os, shutil 

dir_path = '/Users/Bob/Projects/Demo' 
some_char = 'abc' 
dest_dir = "/Users/Bob/tmp" 
for root, dirs, files in os.walk(dir_path): 
    for _file in files: 
     file_path = os.path.join(root, _file) 
     copy = False 
     with open(file_path, 'r') as f: 
      while True: 
       line = f.readline() 
       if not line: 
        break 
       if str(line).find(some_char) > -1: 
        copy = True 
        break 
      if copy: 
       shutil.copy(file_path, dest_dir) 
       print file_path, ' copy...' 
관련 문제