2013-06-12 2 views
14

바이너리 파일을 읽고 변경하고 저장하는 도구를 개발하려고합니다. 내가하고자하는 일은 파일의 각 줄의 목록을 만들고 여러 줄로 작업 한 다음 목록에 다시 참여시키는 것입니다.파이썬으로 바이트 목록 결합하기

file = open('myFile.exe', 'r+b') 

aList = [] 
for line in f: 
    aList.append(line) 

#Here im going to mutate some lines. 

new_file = ''.join(aList) 

저에게이 오류 제공 :

이것은 내가 뭘하려

TypeError: sequence item 0: expected str instance, bytes found 

내가 바이트 함께 일하고 있어요 때문에 의미가 있습니다.

내가 join 함수를 사용할 수있는 방법이 있나요? 바이트 결합과 비슷한 것입니까? 감사합니다.

+0

그것은 가치가 무엇인지, 당신은'aList = f.readlines()'또는'aList = 목록을 할 수있는 위해 (F)' – mgilson

+0

'new_file = '\ x01'.join (aList)' – karthikr

+1

바이너리 파일에서 "라인"에 대해 이야기하는 것이 합리적입니까? 보통 우리는 가독성을 위해 개행 문자를 추가합니다. 이진 파일에는 적용되지 않습니다. 모든 80 바이트와 같은 고정 길이 문자열로 작업하는 것이 더 나을지 궁금합니다. (그냥 생각.) – Rob

답변

38

b''.join()를 사용하여 바이트 문자열에 가입을 수행

>>> b''.join([b'line 1\n', b'line 2\n']) 
b'line 1\nline 2\n' 
+0

그래서 파이썬은 바이트로 작업 할 때 어떤 문자열 옆에 'b'를 추가하는지 인식합니다. 이것은 위대합니다. 감사. – user2130898

2

"회선"을 작업하고 작업을 마치면 바로 쓸 수 있습니다.

file = open('myFile.exe', 'r+b') 
outfile = open('myOutfile.exe', 'wb') 

for line in f: 
    #Here you are going to mutate the CURRENT line. 
    outfile.write(line) 
file.close() 
outfile.close() 
+0

나는이 솔루션에 대해 생각하지 않았다, 이것은 내 것보다 훨씬 쉽다. 감사! – user2130898

관련 문제