2013-03-04 3 views
-1

저는 지금 아주 기본적인 프로그래머입니다. 파이썬 프로그래밍의 아주 기본적인 것을 알고 싶습니다. 어떻게 결과를 저장할 수 있습니까? (목록, 문자열 또는 무엇이든간에))를 파이썬의 파일에 추가 하시겠습니까? 많은 검색을 해왔지만 이에 대한 답을 찾을 수 없었습니다. ".write()"메서드에 대해 생각하고 있었지만 (예를 들어) 문자열과 함께 작동하지 않는 것처럼 보였습니다. 그래서 제 상황은 바이너리 파일이있어서 편집하고 싶기 때문에 문자열로 변환하고 수정 한 다음 나중에 저장하고 싶습니다. i) 바이너리 파일 (jpegs images) 그리고 ii) 내가 원하는 폴더에. 어떻게하면됩니까? 제발 좀 도와주세요.문자열을 파이썬의 이진 파일에 저장하십시오.

import os, sys 

newpath= r'C:/Users/Umberto/Desktop/temporary' 
if not os.path.exists (newpath): 
    os.makedirs (newpath) 

data= open ('C:/Users/Umberto/Desktop/Prove_Script/Varie/_BR_Browse.001_2065642654_1.BINARY', 'rb+') 
edit_data= str (data.read()) 
out_dir= os.path.join (newpath, 'feed', 'address') 

data.close() 


# do my edits in a secon time... 

edit_data.write (newpath) 

edit_data.close() 

을 내가 오류는 다음과 같습니다 :

AttributeError: 'str' object has no attribute 'write' 

UPDATE_2

나는 여기에 UPDATE

내가 실행하는 데 노력하고있어 스크립트입니다 사용을 시도하다 나는 지금까지 무엇을하려고했는데 피클 모듈, 내 바이너리 파일을 직렬화를 수정하고 마지막에 저장하지만, 여전히 작동 점점하지 ...이된다

import cPickle as pickle 
binary= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\_BR_Browse.001_2065642654_1.BINARY', 'rb') 
out= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\preview.txt', 'wb') 
pickle.dump (binary, out, 1) 

TypeError         Traceback (most recent call last) 
<ipython-input-6-981b17a6ad99> in <module>() 
----> 1 pprint.pprint (pickle.dump (binary, out, 1)) 

C:\Python27\ArcGIS10.1\lib\copy_reg.pyc in _reduce_ex(self, proto) 
    68  else: 
    69   if base is self.__class__: 
---> 70    raise TypeError, "can't pickle %s objects" % base.__name__ 
    71   state = base(self) 
    72  args = (self.__class__, base, state) 

TypeError: can't pickle file objects 

내가 'didn를 또 다른 일을 만약 내가 파일을 만들어야한다면 (필자는 필자가 "out"을 만들어야한다. 그렇지 않으면 pickle 메서드에 대한 올바른 인수를 갖지 않을 것이다) 필요하지 않다. 희망에 가까워지고 있습니다.

PS : 나는 pickle.dumps()으로도 시도, 더 좋은 결과 생각을 달성하지 ...

당신이 바이너리 파일을 열고 다른 이진 파일이이 같은 일을 할 수있는 저장하는 경우
+0

문자열에 어떤 식으로'쓰기 '가 작동하지 않습니까? 어쨌든 파일에 목록 등을 저장하려면 [pickle] (http://docs.python.org/2/library/pickle.html)을 사용하는 것이 좋지만 작업과는 완전히 다릅니다 JPEG 또는 다른 바이너리 파일로 작성 –

+0

제 질문을 편집하여 제가 수행하려고하는 것을 볼 수 있습니다. 심지어 '.write()'모듈을 사용하는 부분이 완전히 잘못 되었더라도 그것을 사용하는 방법을 모릅니다 ... – umbe1987

+0

당신이 시도하는 코드를 보여줄 수 있습니까? 그렇지 않으면 질문에 대답하기가 불가능합니다. –

답변

4

:

with open('file.jpg', 'rb') as jpgFile: 
    contents = jpgFile.read() 

contents = (some operations here) 

with open('file2.jpg', 'wb') as jpgFile: 
    jpgFile.write(contents) 

일부 의견 :

  • 'RB'와 'WB'는 읽고 각각 바이너리 모드로 작성합니다. 바이너리 파일 here으로 작업 할 때 'b'가 권장되는 이유에 대한 자세한 정보.
  • 블록을 종료 할 때 파이썬의 with statement이 파일을 닫습니다.

목록, 문자열 또는 기타 개체를 저장하고 나중에 검색해야하는 경우 다른 사람이 지적한대로 pickle을 사용하십시오.

+0

최소한의 설명이나 문서에 대한 링크를 제공하면이 대답이 더 나을 것이라고 생각합니다. 많은 초보자들이 예를 들어 "rb"와 "wb"의 마술이 무엇인지 궁금해 할 것입니다. –

+0

네 말이 맞아. 나는 약간의 덧글을 달아 편집 할거야. –

+0

이것은 훨씬 더 나은 대답입니다. 좋은 작업. –

0

"pickle"이라는 표준 파이썬 모듈을 사용할 수 있습니다.

당신은 여기에 대해 읽을 수 있습니다 : pickle documentation

읽기 매우 쉬운 것입니다 데이터 구조를 쓰기

pickle.dump(obj, file_handler) # for serialize object to file 
pickle.load(file)    # for deserialize from file 

하거나 문자열로 직렬화 할 수 있습니다 pickle.dumps (..) 및로드에서 그것은 : pickle.loads (...)

+0

필자는 jpeg가 바이너리 형식이므로 스크립트를 실행하려고하면 "TypeError : string 또는 buffer 여야합니다."라는 오류 메시지가 출력됩니다. 어쨌든 당신을 감사하십시오! – umbe1987

+0

물론 피클을 사용하여 다른 형식의 데이터를로드 할 수는 없습니다. pickle.dump로 저장된 파일 만로드하고 지정된 형식으로 데이터를 저장합니다. 첫 번째 질문은 "어떻게 문자열과 다른 구조를 저장하고로드 할 수 있습니까?"입니다. 피클이 가장 쉬운 방법입니다. – Elephant

+0

설명서를 빨간색으로 표시하고 파일을 피클하려고 시도하는 중에 오류가 발생했습니다. 나는 당신이 내가 무엇을 시도했는지 알 수 있도록 내 질문을 업데이트하고있다. – umbe1987

관련 문제