2013-07-05 4 views
1

파이썬 3에서는 모드 문자열 'rb'로 텍스트 파일을 연 다음 f.read()를 수행했을 때 파일 내용을 작은 따옴표로 묶어서 찾았습니다 문자 'b'다음에.바이너리 모드에서 파이썬 3 파일 입력이 변경되었습니다.

파이썬 2에서는 파일 내용을 얻었습니다.

나는 이것이 잘 알려져있을 것이라고 확신하지만, 나는 그것을 doco에서 발견 할 수 없다. 누군가가 나를 가리킬 수 있을까요?

+2

http://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit가 적당합니까? – TerryA

+0

파이썬 2에서 파이썬 3으로 전환하는 사람은 누구나 http://python3porting.com/을 읽어야합니다. 그것은 그렇게 크지 않다. :-) –

답변

1

파이썬 3에서도 "파일 내용 만"얻을 수 있습니다. 아마 당신은 어쨌든 당신이하고 있던 일을 계속할 수 있습니다. 더 자세한 설명은 다음을 참조하십시오.

b "는 결과 값이 bytes 문자열임을 나타냅니다. A bytes -string은 일반 문자열과 매우 유사하지만 매우 복잡하지는 않으며 바이너리가 아닌 텍스트 데이터를 처리하는 데 사용됩니다.

이진 데이터에 대해 이해할 수없는 문자열의 메서드 중 일부는 없어졌지만 대부분이 여전히 있습니다. 가장 큰 차이점은 bytes 문자열에서 특정 바이트를 얻으면 다시 정수를 얻는 반면 str 일 경우 길이가 str이된다는 점입니다.

>>> b'foo'[1] 
111 
>>> 'foo'[1] 
'o' 

당신은 't'플래그와 텍스트 모드에서 파일을 열면 당신이 str 다시 얻을. Python 3 str은 Python 2에서 unicode이라고 불렀습니다. 텍스트 데이터를 처리하는 데 사용됩니다.

.decode 방법으로 bytesstr 사이를 앞뒤로 변환합니다.

1

우선 파이썬 2 str 유형은 파이썬 3에서 bytes으로 이름이 바뀌었고 바이트 리터럴은 b''이라는 접두어를 사용했습니다. Python 2 unicode 유형은 새로운 Python 3 str 유형입니다.

파이썬 2에서 파이썬 3 파일 동작을 얻으려면 io.open() 또는 codecs.open()을 사용하십시오. 파이썬 3은 텍스트 파일을 기본으로으로 유니 코드 으로 디코딩합니다.

뭘보고하는 파일, 파이썬 3는 파이썬 2와 당신에게 똑같은을 제공한다는 것입니다, 즉 문자열을 바이트. 바뀐 점은 바이트 문자열의 repr() 앞에 b 접두사가 있고 print() 함수는을 제외하고 에 전달 된 모든 객체의 표현을 repr()으로 사용한다는 것입니다.

print() 기능을 사용하여 이진 데이터를 유니 코드 텍스트로 인쇄하려면 먼저 유니 코드로 디코딩하십시오. 하지만 어쨌든 파일을 텍스트 파일로 열었을 수도 있습니다.

bytes 유형은 텍스트가 아닌 바이너리 데이터를 처리한다는 점을 반영하여 몇 가지 개선 사항이 있습니다. bytes 값을 통해 개별 바이트를 인덱싱하거나 반복하면 int 값 (0에서 255 사이)이 제공되고 문자는 제공되지 않습니다.

+0

17 초 만에 뛰고 있습니다! ;-) 어떤 식 으로든 파이썬 3의'bytes'와 파이썬 2의'str'은 똑같은 것은 아닙니다. 거의. :-) –

+0

그래, 색인 액세스가 향상되었습니다. –

0

때때로 텍스트 파일에 단일 문자 개행 (0A) 또는 이중 문자 개행 (0D0A)이 있는지 알아야 할 필요가 있습니다 (필요합니까?).

우리는 바이너리 모드에서 텍스트 파일을 열고 0D와 0A를 인식하고 다른 바이트를 일반 텍스트 문자로 처리하여 혼동을 피했습니다.

모든 이진 파일을 찾아서 추가 된 자료를 제거한 새로운 기능인 oldread()로 대체하여 이러한 코드를 포팅 할 수 있습니다.하지만 다소 고통 스럽습니다.

저는 파이썬 신학자들이 'rb'를 그대로 유지하고 새로운 'rx'또는 새로운 동작을 추가한다고 생각했습니다. 그냥 무언가를 폐지하는 것 같습니다.

그러나 그곳에는 이 있는데,이 질문은 Lennert의 문서에서 'rb'를 검색하여 확실하게에 응답합니다.

관련 문제