2014-12-22 5 views
-1

이것은 첫 번째 파이썬 프로젝트 중 하나이며 src/디렉토리를 다시 만들 수있는 스크립트를 작성하는 스크립트를 작성하려고합니다. 이것은 내가 사용자에게 배포하는 것입니다. walk를 사용하고, 먼저 모든 디렉토리를 생성 한 python 파일을 작성한 다음 파일을 씁니다. 내가 가진 문제는 파일에 쓸 수있는 단일 문자열로 파일을 만드는 것입니다. 문자열 파이썬 파일 저장 시도

내가 가지고있는 프로그램입니다 : 내가 하위 디렉토리에있는 디렉토리에서 실행할 경우

import os 
import pickle 

src = os.path.dirname(os.path.realpath(__file__)) + os.sep + 'src' 
fPack = 'import os \nimport pickle \nmyDir = os.path.dirname(os.path.realpath(__file__))' 
Pack ='' 
print 'Packing ' + src 
pickle 
for root, dirs, files in os.walk(src, topdown=True): 
    for name in files: 
     print os.path.join(root, name) 
     f = open(os.path.join(root, name), 'r') 
     Pack = Pack + '\nf = open(os.path.join(myDir,\'' + name + '\'), \'w\')' 
     fileCont = pickle.dumps(f.read()) 
     Pack = Pack + '\nf.write(pickle.loads(\'' + fileCont + '\'))' 
    for name in dirs: 
     print os.path.join(root, name) 
     fPack = fPack + '\nos.makedirs(os.path.join(myDir,\'' + name + '\'))' 

print '==================================================\n\n\n' 
print fPack + Pack 
f = open(os.getcwd() + os.sep + 'dist' + os.sep + 'Pack.py', 'w') 
f.write(fPack) 
f.write(Pack) 

을 그리고, 그리고 그 안에 파일이 파일

import os 
import pickle 
myDir = os.path.dirname(os.path.realpath(__file__)) 
os.makedirs(os.path.join(myDir,'SphereText')) 
f = open(os.path.join(myDir,'TextMain.py'), 'w') 
f.write(pickle.loads('S"########################################################\n#Main SphereText file.         #\n#SpereText is a simple Notepad-Like plain text editor #\n########################################################\n\nfrom Tkinter import *\nfrom tkFileDialog import *\nimport tkSimpleDialog\n\nroot = Tk()\nroot.title('SphereText')\n\ndef fSave():\n fileName = asksaveasfilename(parent=root)\n f = open(fileName, 'w')\n f.write(text.get(1.0,END))\n\ndef fOpen():\n fileName = ''\n fileName = askopenfilename(parent=root)\n f = open(fileName, 'r')\n text.delete(1.0,END)\n text.insert(1.0, f.read())\n\ndef tReplace():\n  Old = tkSimpleDialog.askstring('SphereText', 'Replace:')\n  print Old\n  New = tkSimpleDialog.askstring('SphereText', 'With:')\n  print New\n  content = text.get(1.0,END)\n  content = content.replace(Old, New)\n  text.delete(1.0,END)\n  text.insert(1.0, content)\n \nmenubar = Menu(root)\nmenubar.add_command(label='Save', command=fSave)\nmenubar.add_command(label='Open', command=fOpen)\nmenubar.add_command(label='Replace', command=tReplace)\nroot.config(menu=menubar)\n\ntext = Text(root, wrap=WORD)\n\ntext.pack()\n\nroot.mainloop()\n" 
p0 
.')) 

의 때로 믿을 수 '를 만들어 탈출하고 마지막에는 두 줄의 줄 바꿈이 있습니다. 나는 연재의 모든 요점이 항상 같은 방식으로 다시 읽을 수 있다고 생각했다. 누구든지 파일을 유효한 문자열로 mak 할 수있는 방법을 알고 있습니까?

+0

왜 tarfile을 사용하지 않습니까? –

+1

@ m.wasowski 나는 pyzipfile을 사용하는 것을 끝내었다. – SilentVoid

답변

0

새 질문에 대해 유감스럽게 생각합니다. 나는 바퀴를 재발 명하려고했습니다. 분명히 그것은 Squeeze라는 이름으로 이미 존재합니다.

+0

그런 다음 * the * 답으로 자신의 대답을 수락하십시오 –