2017-10-25 13 views
0

나는 작업 디렉토리에서 공유 드라이브로 파일을 자동으로 복사하여 다른 사람들이 잡고 잡을 수 있도록 스크립트를 작성 중이다. 현재 진행중인 프로젝트에 따라 공유 드라이브에 특정 장소가 있습니다. 예를 들어프로젝트 이름과 파일 경로의 데이터베이스로 작동하도록 가져 오기 파일을 만들고 구현하려면 어떻게합니까?

:

나는 "바나나"라는 프로젝트를 진행하고 있다면, 나는 내 로컬 "바나나"디렉토리에 내 스크립트를 실행 할 수 있어야합니다. 스크립트는 단일 인수를 요구합니다. 인수는 프로젝트의 이름입니다.

예 :

>python C:\Users\me\projects\Banana\myCopyScript.py Banana 

그렇게되면, 자동으로 공유 드라이브에 그 프로젝트의 폴더에 내 모든 "바나나"프로젝트 파일을 복사해야합니다.

예 : 내가 가서 수동으로 파일 경로 위치를 입력하면

>python C:\Users\me\projects\Banana\myCopyScript.py Banana 
...Copying Banana to T:\SharedDrive1\projects\Banana 
...Copying Banana to Z:\SharedDrive2\projects\Banana 

는 지금, 스크립트에만 작동 (복사하고 위치로 복사).

그러나이 스크립트 파일로 가져올 수있는 파일을 만들고 싶습니다. 이 가져 오기 파일에는 모든 프로젝트 및 복사해야하는 파일 경로의 목록이 포함됩니다.

예 .xml 파일 :

<project>Banana</project> 
    <copyTo>T:\SharedDrive1\projects\Banana</copyTo> 
    <copyTo>Z:\SharedDrive2\projects\Banana</copyTo> 

<project>Apple</project> 
    <copyTo>T:\SharedDrive1\projects\Apple</copyTo> 
    <copyTo>Z:\SharedDrive2\projects\Apple</copyTo> 

<project>Orange</project> 
    <copyTo>T:\SharedDrive1\projects\Orange</copyTo> 
    <copyTo>Z:\SharedDrive2\projects\Orange</copyTo> 

가 나는 .xml 파일에 설정하고 있지 않다. 그것은 모든 종류의 파일 일 수 있습니다. 그 요소는 제가 묻고있는 전반적인 질문의 일부입니다. 나는 JSON과 YAML도 고려했다. 이 형식의 데이터에 가장 적합한 형식을 알고 싶습니다.

def main(): 

parser = argparse.ArgumentParser(description = 'copy targets out to their folders in the T: and Z: drives) 

parser.add_argument('project', help='The project must be a folder in the current directory containing the files you want to copy') 

args = parser.parse_args() 

project_name = args.project 

# TODO : figure out how to grab the local directory automatically instead of hard coding it each time 
directory = r'C:\Users\me\projects\Banana' 

for f in os.listdir(directory): 
    out_files.append(directory + '\\' +f) 

# TODO : figure out how to reference an import file with all the projects and their file paths instead of hard coding it each time 
for target_folder in (r'\\SharedDrive1\projects', 
    r'\\SharedDrive2\projects'): 

    make_folder(target_folder + '\\' + project_name) 

    print >> sys.stdout, 'Copying project folder', project_name, 'to', target_folder + '\\' + project_name 

    print (" ") 


    copy_files(out_files, target_folder + '\\' + project_name) 

을하지만이 좋지 않은 :

는 지금, 내 스크립트과 같이 하드 코딩 된 파일 경로가 있습니다. 나는 여기서 묻고있는 질문의 두 번째 부분이다. 나는 이것을 정리할 수 있기를 원하지만, 나는 이런 종류의 배경에 대해 많은 배경을 가지고 있지 않다. 그것은 디렉터리를 트래버스하고 파일/폴더를 조작하는 스크립트 작성에 대한 나의 첫 번째 시도입니다.

답변

0

어쩌면 이것은 당신을 도울 수 있습니다

def getdict(var1,var2,var3): 
    """ 
    var3 = 0 - read the dict (var1 = row, var2 = col) 
    var3 = 1 - search the dict for the key provided in var1 and return [row,col] 
    var3 = 2 - return dict len 
    """ 
    dict = { 
     0:["item_00","item_01"], 
     1:["item_10","item_11"], 
     2:["item_20","item_21"], 
    } 
    if var3 == 0: #read 
     return dict[var1][var2] 
    elif var3 == 1: #search 
     for key, value in dict.items(): 
      idx = [] 
      if value[0] == var1: 
       idx = [key,0] 
       return idx 
      elif value[1] == var1: 
       idx = [key,1] 
       return idx 
    elif var3 == 2: #len 
     return len(dict) 

당신은 파일 가져 오기에 저장할 수 있습니다.

dict를 텍스트 파일로 작성하고 .py (저의 csv 모듈 사용을 선호합니다)로 저장하는 함수 내에서 dict를 업데이트 할 수 있습니다. 쓰기 전에 항목을 읽고 루프 내에서 dict 항목을 처리하십시오.

import csv 

def writefile(fileline,file): 
    text_file = open(file, "w") 
    text_file.write(fileline) 
    text_file.close() 

txtline = 'def getdict(var1,var2,var3):\n' 
txtline = textline + ' """\n' 
... 

(treat inside a loop) 
0:["item_00","item_01"], 
1:["item_10","item_11"], 
2:["item_20","item_21"], 
... 

writefile(txtline,filename) 

항목을 삽입 할 수 있으며 dict len을 얻을 수 있습니다.

마지막으로 당신은 그것을 다시로드 할 수 있습니다 :

How do I unload (reload) a Python module?