[파이썬, Python] binary file 열어 byte arrary로 읽기


바이너리 파일 읽기 전용 모드로 열어서, byte array로 파일 전체를 읽어 오는 예제는 다음과 같습니다.


예제)

file = open(filename, 'rb')

byteBuffer = bytearray(file.read())



=======================


파일 처리 모드
  - 'r' : 읽기 전용
  - 'w' : 쓰기 전용
  - 'a' : 파일 끝에 추가(쓰기 전용)
  - 'r+' : 읽고 쓰기
  - 'w+' : 읽고 쓰기(기존 파일 삭제)
  - 'a+' : 파일 끝에 추가(읽기도 가능)
  - 'rb' : 바이너리 파일 읽기 전용
  - 'wb' : 바이너리 파일 쓰기 전용
  - 'ab' : 바이너리 파일 끝에 추가(쓰기 전용)
  - 'rb+' : 바이너리 파일 읽고 쓰기
  - 'wb+' : 바이너리 파일 읽고 쓰기(기존 파일 삭제)
  - 'ab+' : 바이너리 파일 끝에 추가(읽기도 가능)

신고
  1. ㅇㅇ 2016.07.15 00:13 신고

    bytearray 는 왜 해주는거죠? 차이를 못느끼겠는데요..


[파이썬, Python] 한글 지원


한글이 포함되어 있으면 아래와 같은 Error가 발생함.

File "test.py", line 21

SyntaxError: Non-ASCII character '\xed' in file test.py on line 3, but no enc

oding declared; see http://www.python.org/peps/pep-0263.html for details


이 문제점을 해결하기 위해서는, 아래 붉은 색 부분을 추가하면 됩니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-

print(u'안녕~~~'.encode('cp949'))



신고


[파이썬, Python] sys.argv 명령행 옵션 구하기 - 파일명 입력 받기 예제


sys.argv[0] 에는 python 스크립트 자기 자신의 파일명 풀패스가 들어감.
sys.argv[1] 에는 첫번째 옵션이 들어가고,
sys.argv[2] 에는 두번째 옵션이 들어감.


예제 1)

[test.py]

#!/usr/bin/python

import sys

optionLen = len(sys.argv)

if optionLen is 1:

print 'There is no option.'

else:

print 'Number of option is %d.' % (optionLen-1)

for i in range(optionLen):

print 'sys.argv[%d] = %s' % (i, sys.argv[i]) 


[결과 1]

C:\>python test.py option1 option2 option3

Number of option is 3.

sys.argv[0] = test.py

sys.argv[1] = option1

sys.argv[2] = option2

sys.argv[3] = option3



예제 2) 파일명 입력 받기

#!/usr/bin/python

import sys

if len(sys.argv) is 1:

filename = raw_input('please type file name: ') # There is no option.

else:

filename = sys.argv[1]

while True:

try:

print 'The File is : %s' % filename

file = open(filename, 'rb')

break

except:

print '[Error] No such file: %s' % filename

filename = raw_input('please try again!!! type file name: ')



아래 결과 2-1는, python test.py와 같이 실행을 할 경우이며,

len(sys.argv)의 값이 1이 되기 때문에, raw_input이 실행되어, 

파일명 입력을 유도하는 "please type file name:"이 화면에 표시되고, 

"test.py"를 입력하면, "The File is : test.py"라 출력됩니다. 



[결과 2-1]

C:\>python test.py

please type file name: test.py

The File is : test.py



아래 결과 2-2에서, python test.py test.py와 같이 실행을 할 경우에는,  

len(sys.argv)의 값이 2가 되고, sys.argv[1]에는 "test.py"가 저장되며, 

"The File is : test.py"가 바로 출력됩니다.



[결과 2-2]

C:\>python test.py test.py

The File is : test.py



결과 2-3에서, python test.py test1.py와 같이 실행을 할 경우에는,

len(sys.argv)의 값이 2가 sys.argv[1]에는 "test1.py"가 저장되며, 

테스트한 폴더에 test1.py라는 파일이 없기 때문에,

"[Error] No such file: test1.py"라고 출력되어 지고, 

파일명을 다시 입력하도록 유도하는 "please try again!!! type file name:"가 출력됩니다.



[결과 2-3]

C:\>python test.py test1.py

The File is : test1.py

[Error] No such file: test1.py

please try again!!! type file name:


신고
  1. phtjmmm2 2017.03.26 13:26 신고

    안녕하세요. import sys하구 open(sys.argv[1])을 하는데 list index out range 에러가 뜨네요.
    어떻게하면 sys.argv[1]을 열수 있을까요?
    sys.argv[0]은 파일명이고 이후로 인자를 넣으라는데 무슨말인지 모르겠네요..ㅜㅜ

  2. phtjmmm2 2017.03.29 02:02 신고

    1과 2를 다해보았는데,
    예제 2에서는 raw_input이라는 function이 추가되어야만 input값을 받아서 filename으로 저장할 수 있는 것아닌가요?
    예제 2를 실행시켰을 때는 raw_input에서 에러가 발생하네요..ㅜㅜ
    sys.argv[1]을 pycharm 환경에서 어떻게 열 수 있는지 궁금합니다 .. ㅜㅜㅜ

    • Favicon of http://thecoollife.tistory.com BlogIcon 절믄유월 2017.03.29 10:13 신고

      이해를 돋기 위해서 포스팅된 글의 예제2에서, 입력된 파일명을 출력하도록 "print 'The File is : %s' % filename"를 추가하였고, 테스트 결과도 3가지 상황에 대해서 정리 하였습니다.
      수정된 글을 다시 읽어 보시면 도움이 될 것 같습니다.
      다시 해 보시고, 에러가 발생하신다면, 어떤 에러가 발생하는지?
      그리고, 예제를 실행 시킬 때, 결과 2-1, 2-2, 2-3 중에서, 어떤 방식으로 테스트를 했는지? 등등을 알려 주시면 좀 더 자세하게 말씀드릴 수 있을 것 같네요 ^^

+ Recent posts

티스토리 툴바