이 거의 모든 것을 당신이 원하는 않습니다 이런 식으로 만든 data.txt로와
f = open('data.txt', 'rb')
while True:
char = f.read(1)
if not char: break
print "{:02x}".format(ord(char)),
:
f = open('data.txt', 'wb')
f.write("ab\r\ncd")
f.close()
내가 얻을 다음과 같은 출력 :
61 62 0d 0a 63 64
TL; DR - 1. 변수 이름이 잘못되었습니다. 2. 16 진수 문자열을 잘못 슬라이스하고 있습니다. 3. 코드는 개행을 절대 대체하지 않습니다. 그 기능을 잊고 싶을 수도 있습니다. 문자, 정수 코드 및 정수를 나타내는 16 진수 문자열의 차이를 아직 이해하지 못했습니다. 그것들은 모두 다르다 : 두 개는 문자열이고 다른 하나는 정수이다. 그리고 그들 중 어느 것도 서로 동일하지 않다. 4. 일부 파일의 경우 줄 바꿈을 제거하지 않아야합니다.
===
1. 변수 이름은 끔찍한입니다.
아무에게도 질문하지 않으려면 괜찮습니다. 그러나 모든 사람이 질문을해야하기 때문에 누구나 이해할 수있는 설명적인 변수 이름을 사용해야합니다.변수 이름은 다음보다 약간 낫습니다.
fname = 'data.txt'
f = open(fname, 'rb')
xxxyxx = f.read()
xxyxxx = len(xxxyxx)
print "Length of file is", xxyxxx, "bytes. "
yxxxxx = 0
while yxxxxx < xxyxxx:
xyxxxx = hex(ord(xxxyxx[yxxxxx]))
xyxxxx = xyxxxx[-2:]
yxxxxx = yxxxxx + 1
xxxxxy = chr(13) + chr(10)
xxxxyx = str(xxxxxy)
xyxxxxx = str(xyxxxx)
xyxxxxx.replace(xxxxyx, ' ')
print xyxxxxx
이 프로그램은 정상적으로 실행되지만 이해하기는 어렵습니다.
2. hex() 함수는 길이가 다른 문자열을 생성합니다.
예를 들어
,
print hex(61)
print hex(15)
--output:--
0x3d
0xf
그리고 슬라이스 [-2 :]를 복용 :
3d
xf
두 번째에있는 'x'를 얻었는지를 참조하는 문자열의 각각에 대해 당신에게 제공 하나? 슬라이스 :
[-2:]
문자열의 끝으로 이동하여 두 개의 문자를 백업 한 다음 나머지 문자열을 가져온다고 말합니다. 대신 그 일의 처음부터 3 개 문자를 시작하는 슬라이스를 가지고 :
[2:]
3. 코드는 줄 바꿈을 대체하지 않습니다.
파일을 가정이 두 연속 된 문자가 있습니다
"\r\n"
이제, 첫 번째 문자에서 읽기 "\ 연구", 및 정수, ORD ("\ r에")로 변환, 제공 당신은 정수 13. 지금 당신은 변환 당신에게 문자열 "0xd"
를 제공하고, 당신이 당신에게주는 처음 두 문자를 슬라이스 문자열, 진수 (13)에 : 코드에서
"d"
다음이 줄을 :
bndtx.replace(entx, ' ')
문자열 에있는 모든 문자열 "\r\n"
을 찾아 바꾸십시오. 대체 문자열은 2 자이고 문자열은 "d"
은 1 자 길이이므로 대체 할 수 없습니다.
교환은 "\r\n"
및 "0d"
중 하나에서 작동하지 않습니다. 그러나 적어도 두 문자열에는 두 문자가 있기 때문에 작동 할 가능성이 있습니다. 두 문자열을 공통 분모 인 ascii 코드로 축소합시다. "\ r"의 ASCII 코드는 13이고 "\ n"의 ASCII 코드는 10입니다. 이제 "0d"
문자열은 무엇입니까? 문자"0"
의 ASCII 코드는 48이며 문자 "d"의 ASCII 코드는 100입니다. 이러한 문자열에는 공통 문자가 하나도 없습니다. 심지어이 작동하지 않습니다
x = '0d' + '0a'
x.replace("\r\n", " ")
print x
--output:--
'0d0a'
을하지도 않습니다이 :
x = 'd' + 'a'
x.replace("\r\n", " ")
print x
--output:--
da
결론입니다 : 헥스 문자열에 다음 정수로 문자를 변환하는 당신에게 원래 문자를주고 결국하지 않습니다 - 그들은 다른 문자열입니다.따라서 이렇게하면 :
char = "a"
code = ord(char)
hex_str = hex(code)
print char.replace(hex_str, " ")
... "a"는 공백으로 바꿀 수 없습니다. 여기에 출력을 살펴보면 :
char = "a"
print repr(char)
code = ord(char)
print repr(code)
hex_str = hex(code)
print repr(hex_str)
print repr(
char.replace(hex_str, " ")
)
--output:--
'a'
97
'0x61'
'a'
당신 '이'는 거기에 한 문자와 문자열 것을 볼 수 있으며, '0x61'
4 개 거기에 문자가있는 문자열입니다 '0'
, 'x'
, '6'
및 '1'
, 그리고 당신은 하나의 문자열 안에 4 개의 문자열을 찾을 수 없다.
4) 줄 바꿈을 제거하면 데이터가 손상 될 수 있습니다.
일부 파일의 경우 줄 바꿈을 바꾸지 않으려합니다. 예를 들어 이미지의 색상을 나타내는 정수가 들어있는 파일 인 .jpg 파일을 읽었을 때 이미지의 일부 색상이 번호 13으로 표시되고 숫자 10이 표시되면 코드는 출력에서 해당 색상을 제거합니다.
그러나 텍스트 개의 파일 만 읽는 프로그램을 작성하는 경우 줄 바꾸기가 좋습니다. 그러나 다른 운영 체제에서는 다른 줄 바꿈을 사용합니다. Windows 줄 바꿈 (\ r \ n)을 바꾸려고합니다. 즉, 줄 바꿈에 \ n을 사용하는 Mac 또는 Linux 컴퓨터에서 만든 파일에서 프로그램이 작동하지 않습니다. 쉽게 해결할 수있는 방법이 있지만 어쨌든 걱정하지 않으려 고합니다.
나는 그 모든 것이 너무 혼란스럽지 않기를 바랍니다.