2016-12-15 4 views
1

txt 파일을 기반으로 MD5 해시를 생성하려고합니다.파이썬은 파일에서 리턴 카트리지와 피드 라인을 제거하지 않습니다.

  • 인코딩 규칙은 모든 문자가
  • 뉴 라인 문자를 소문자 여야 'ISO-8859-1'
  • 을해야하며, 그러나, 같은 내가 따라야 할 몇 가지 규칙이있다 해시 빌딩에서 캐리지 리턴 문자를 고려하지 않아야합니다.

    내 파일에 새 라인 및 리턴 카트리지를 의미하는 \r 및문자가 포함되어 있습니다. 나는 rstripstrip 함수를 사용하여이 문자를 제거하려고 시도했지만 작동하지 않는 것으로 보입니다. 이것에 관해서는, 나는 txt 파일을 썼고 메모장 ++에서 열었고 아래 그림에서 볼 수 있듯이 여전히 문자가 있습니다.

    Check the cr and lf characters in that image

나는 다른 해결책을 시도 : 난 그냥 문자가 정말있는 경우 있는지 확인하기 위해, 구분자로 \n를 사용하여 목록을 작성 split 기능을 사용했다. 내 생각처럼, 그들은 그렇습니다.

정말 그 문자를 제거하려면 어떻게해야합니까? 코드의

하나는 내가 노력 :

from hashlib import md5 

open_file = open('N0003977.290', 'r', encoding = 'ISO-8859-1') 
test_file = open('file_test.txt', 'w') 
file_content = open_file.read().lower().rstrip('\n\r ').strip('\n\r') 

#writing a txt file to check if there are new line characters 
test_file.write(file_content) 
test_file.close() 

#creating a md5 hash 
m = md5() 
m.update(file_content.encode('ISO-8859-1')) 
print(m.hexdigest()) 
+0

사용'str.replace' 그 문자를 빈 문자열, 즉'file_content.replace ('\ n', '') .replace ('\ r', '')'로 대체합니다. –

+0

나는 그것을 시도했지만 효과가 없었다. :/ –

+0

어떻게 작동하지 않았습니까? –

답변

0

그래서 같은 str.translate()을 사용하여 "캐리지 리턴"및 "줄 바꿈"문자 삭제합니다 :이 있다면, 또는

file_content = file_content.translate({ord(ch):None for ch in '\r\n'}) 

을 교실 과제와 우리가 아직 str.translate()을 다뤄 보지 않았다면, 나는 "손으로"작업을 할 수있을 것입니다 :

file_content = ''.join(ch for ch in file_content if ch not in '\r\n') 

전체 프로그램 :

from hashlib import md5 

open_file = open('N0003977.290', 'r', encoding = 'ISO-8859-1') 
test_file = open('file_test.txt', 'w', encoding = 'ISO-8859-1') 
file_content = open_file.read() 

# Choose one of the following: 
file_content = file_content.translate({ord(ch):None for ch in '\r\n'}) 
# file_content = ''.join(ch for ch in file_content if ch not in '\r\n') 


#writing a txt file to check if there are new line characters 
test_file.write(file_content) 
test_file.close() 

#creating a md5 hash 
m = md5() 
m.update(file_content.encode('ISO-8859-1')) 
print(m.hexdigest()) 
+0

고맙습니다. @ Rob so. 그것은 효과가있다! :디 –

0

원래 파일은 ISO-8859-1 인코딩으로되어 있습니까?

그렇다면 해시를하기 전에 인코딩하지 않아야합니다. 그렇지 않으면 인코딩을 수행해야하지만이 인코딩을 사용하여 파일을 열면 안됩니다.

그것은 단지 전체 내용의 시작과 끝에서 탈출되기 때문에 rstrip과 lstrip이 작동하지 않습니다

>>> '\r\nlalala\r\nlalalal\r\n'.rstrip().lstrip() 'lalala\r\nlalalal'

가 당신을 도움이되기를 바랍니다,