2016-11-03 2 views
0

프로그래밍에 익숙하지 않고 Python을 사용하여 지난 24 시간 내에 생성되거나 수정 된 하나의 폴더에서 파일을 검색하는 스크립트 작성과 관련된 작업을 수행하고 있습니다. 해당 파일을 다른 디렉토리로 이동하십시오.Python의 시간 범위 특정 파일 이동

필자는 파일 생성 및 수정 날짜를 인쇄하는 코드를 작성했습니다.이 코드는 내에 24 시간 전에 수정 된 이전 파일을 정렬하는 함수입니다. 하지만 실제로 특정 파일을 가져 와서 새 폴더로 전송하는 스크립트를 만드는 데 어려움을 겪고 있습니다. 이것은 내 코드의 첫 번째 부분입니다 :

import os,time 
    import datetime 
    import shutil 


    now = dt.datetime.now() 
    ago = now-dt.timedelta(hours=24) 
    strftime = "%H:%M %m/%d/%Y" 
    created = 'C:\\Users\\Jacquelin\e\Desktop\\created' 
    dest = 'C:\\Users\\Jacqueline\\Desktop\\dest' 


    for root, dirs,files in os.walk(created): 
     for fname in files: 
      path = os.path.join(root, fname) 
      st = os.stat(path)  
      mtime = dt.datetime.fromtimestamp(st.st_mtime) 
      if mtime > ago: 
       print "True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y") 
      else: 
       print False 

    for fname in os.listdir(created): 
     if mtime > ago:     
      shutil.move(path, dest) 
      print "moved to dest", fname 

나는 파일을 전송하는 shutil.move를 사용하고, 그리고 시도 만 things-- 그러나 그것을 알아낼 수 없습니다! 또한 이것들을 기능을 단순화하기위한 것으로 바꾸는 작업을하고 있습니다. 지금까지이 내가 가진 무엇이 올바른 생각하지만, 전달하는 변수를 모르고 같은 느낌은 "이동"기능에 대한

def find_info():         #this first func. works fine. 
     for root, dirs, files in os.walk(created): 
     for fname in files: 
      path = os.path.join(root, fname)           
      st = os.stat(path)  
      mtime = dt.datetime.fromtimestamp(st.st_mtime)       
     if mtime > ago: 
      print True 
     else: 
      print False 

, 나는 빈 괄호를 떠 났어요. 그리고 반환 부랑자의 미친 긴 목록. 그래서.

기능에 전달할 변수가 확실하지 않습니다. 그 후에 파일을 실제로 전송했는지 확인하기 위해 디렉토리를 인쇄합니다. 저주받은 물건들은 움직이지 않을 것입니다.

감사합니다.

+0

'shutil.move'를 어떻게 사용하고 있으며 무엇이 잘못되었는지 설명해 주시겠습니까? 오류 메시지 등? 또한 백 슬래시가 특별한 의미를 가지기 때문에 백 슬래시가있는 경로가 잘못 해석 될 수 있으므로''c : \\ Users \\ ... ''또는''os ''를 사용하여 이스케이프해야합니다. .path.join'. –

+0

방금 ​​코드를 변경했으며 원본 메시지와 함께 위 코드를 작성합니다. shutil.move를 사용하면 파일을 이동하지 않는 것입니다! 프로그램에서 원본 및 대상 디렉토리를 인쇄하도록하고 있지만 전송이 이루어지지 않았습니다. – nikkiy

답변

0

거의 다 왔습니다. 특정 파일을 이동할 수 있음을 감지 한 후 (예 : print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")) 대신에 이전/이후) 함수를 호출하면 shutil.move 함수가 호출됩니다.

import os,time 
import datetime 
import shutil 

import datetime as dt 

now = dt.datetime.now() 
ago = now-dt.timedelta(hours=24) 
strftime = "%H:%M %m/%d/%Y" 
created = 'here' 
dest = 'there' 

for root, dirs,files in os.walk(created): 
    for fname in files: 
     path = os.path.join(root, fname) 
     st = os.stat(path)  
     mtime = dt.datetime.fromtimestamp(st.st_mtime) 
     if mtime > ago: 
      print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")) 
      shutil.move(path, dest) 
      # this is actual move 

다음 코드는 모든 잘못과 필요가 없습니다 : : 이런 식으로 뭔가가 작동합니다

for fname in os.listdir(created): 
    if mtime > ago:     
     shutil.move(path, dest) 
     print "moved to dest", fname 
여기

mtime, pathdest 루프 변수 fname에 의존하지 않는, 그래서 그것은 분명하지 않다 왜 우리는 여기서 루프가 필요한지, 그리고이 조각의 의도 된 행동은 무엇인가? 이 기능을 인쇄True 또는 False 대신 그것을 반환 : 함수 find_info()은 (우리가 실제로 중 하나를 필요로하지 않는) 아무것도 돌려주지 있다는 것을

참고.

+0

오, 세상에, 이건 마 법적. 정말 고맙습니다! 그래서 실제로 어떤 기능을 만들 필요가 없습니까? 나는 루프를 위해서만 사용할 수 있고, 하루라고 부를 수 있을까? – nikkiy

+0

문제의 특정 하위 문제를 해결하고 잠재적으로 프로그램의 다른 부분에서 여러 번 사용할 수있는 논리의 일부분이 분리되어 있다면 기능이 필요합니다. 함수를 작성하기 위해 함수를 작성할 필요가 없습니다. –