2016-11-02 1 views
0

저는 파이썬의 readline()을 사용하여 한 줄씩 읽을 텍스트 파일을 mysql으로 읽어들입니다.python readline이 파일 끝을 잘못 판단했습니다

내가 겪고있는 문제는 텍스트 파일에 100 개 이상의 행이 있지만 75 행의 빈 줄은 0d0a입니다. readline()은 파일이 끝까지 도달하여 멈추는 것으로 생각합니다.

어떻게 방지합니까?

대단히 감사합니다.

P.

for line in ipv4file: 
if line: 
    lineSplit = line.split() 

    ip_start = lineSplit[0] 

    # define a tuple data to hold the parameters, remove all the leading and trailing blank spaces 
    data = (lineSplit[0].lstrip().rstrip(), lineSplit[1].lstrip().rstrip(), lineSplit[2].lstrip().rstrip()) 

    sqltemplate = """ 
     insert into ipv4(ip_start, ip_end, ip_owner) values (%s, %s, %s) 
    """ 

enter image description here

HEX 형식의 파일 : enter image description here

이 있습니다 직전 1.6.0.0

0D 0A 0D 0A을하는 아래는 샘플 파일에서 내 코드 부분입니다

감사합니다.

+0

파일 중간에 빈 줄과 같은 것은 없습니다. 마지막 줄 이외의 모든 줄에는 끝에 줄 바꿈이 있습니다. – TigerhawkT3

+0

이 문제를 재현 할 수 없습니다. –

+0

'readline'은 그 행을'\ n "(또는"\ r \ n ")으로 읽어야하고 다음 행을 계속 읽어야합니다. 이것이 실패한 예를 게시 할 수 있습니까? 어쩌면 100+ 라인 파일을 가져 와서 대부분을 다듬고 남아있는 것을 게시하십시오. print (base64.encodestring (open ('f.py', 'rb'). read()). decode ('ascii')) '이렇게 base64 문자열을 디코딩하여 정확한 결과를 얻을 수도 있습니다. 파일 다시. – tdelaney

답변

0

readline()은 실제로 행 튜플을 문자열 튜플로 읽습니다. 이는 0D 0A가 ("\ n") 튜플로 읽혀질 수 있음을 의미하므로 첫 번째 문자가 두 문자가 "\ n"이면이 행이 빈 행임을 의미하므로 건너 뛸 필요가 있습니다.

감사합니다.

1

당신은 빈 라인에 대한 체크가 :

if line: 

을하지만 개행 문자가 여전히 line의 일부이기 때문에 작동하지 않습니다. 테스트를 약간 수정하여 제대로 작동하도록 할 수 있습니다.

if line.strip(): 
관련 문제