문제

내 질문은 간단합니다.

bash 명령을 Python 방식으로 코딩하는 방법이 있나요?

hexdump -e '2/1 "%02x"' file.dat

분명히, os, popen 또는 단축키를 사용하지 않고 말이죠. ;)

편집하다:명시적으로 지정하지는 않았지만 코드가 Python3.x에서 작동한다면 좋을 것입니다.

감사해요!

도움이 되었습니까?

해결책

Python 2.x에만 관심이 있다면, line.encode('hex') 바이너리 데이터 덩어리를 16진수로 인코딩합니다.그래서:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print chunk.encode('hex')

(IIRC, hexdump 기본적으로 한 줄에 32개의 16진수 쌍을 인쇄합니다.그렇지 않다면 그냥 바꾸세요 32 에게 16 아니면 뭐든...)

두 가지 주장이라면 iter 당황스러워 보이면 도움말 링크를 클릭하세요.일단 아이디어를 얻으면 그다지 복잡하지 않습니다.

Python 3.x에 관심이 있다면, encode 유니코드 문자열을 바이트로 변환하는 코덱에서만 작동합니다.반대 방향(또는 다른 조합)으로 변환하는 모든 코덱을 사용해야 합니다. codecs.encode 명시적으로 수행하려면:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print(codecs.encode(chunk, 'hex'))

아니면 그냥 이용하는 게 나을 수도 있겠네요 hexlify:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print(binascii.hexlify(chunk))

전체 파일을 메모리로 읽는 대신 인쇄하는 것 외에 다른 작업을 수행하려면 반복자를 만드는 것이 좋습니다.이것을 함수에 넣고 변경할 수 있습니다. printyield, 해당 함수는 원하는 반복자를 정확하게 반환합니다.또는 genexpr을 사용하거나 map 부르다:

with open('file.dat', 'rb') as f:
    chunks = iter(lambda: f.read(32), b'')
    hexlines = map(binascii.hexlify, chunks)

다른 팁

표준 라이브러리는 당신의 친구입니다. binascii.hexlify () .

단순히 read() 전체 파일및 encode('hex') .더 많은 pythonic 일 수있는 것은 무엇입니까?

with open('file.dat', 'rb') as f:
    hex_content = f.read().encode('hex')
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top