2017-11-08 1 views
3

처럼 나는 다음과 같은 문제가 큰 파일 (몇 메가 비트)를 읽는 기능이 있고, 내용은 같습니다기능은 별도의 파일에 느린

0x05 0x00 0x00 0x00 0xCF 0x00 0x00 0x00 ; .......... 
0xCF 0x00 0x00 0x00 0x22 0x00 0x00 0x00 ; ......"... 
0x51 0x84 0x07 0x00 0x02 0x00 0x01 0x00 ; ..Q....... 

내 기능에만 16 진수 값을 읽을 수있다 , "무시" 뒤에 오는 글자가 줄 끝까지 올 때까지. 내가 필요한 첫 번째 줄에서

데이터

"의 0x05 × 00 × 00 × 00 0xCF × 00 × 00 × 00"입니다

나는 두 가지 방법을 시도

, 하나는이 기능

def ReadFileAsList(fileName): 

    fileName = "2Output.txt" 
    fileContentStr = "" 
    with open(fileName,'r') as f: 
     for line in f: 
      fileContentStr += line.split(';')[0] 

    fileContentList = fileContentStr.split() 
    return fileContentList 
과 별도의 파일입니다 이 라인은 내 주요 평 파일에 직접적으로

와 두 번째 방법,

fileName = "2Output.txt" 
fileContentStr = "" 
with open(fileName,'r') as f: 
    for line in f: 
     fileContentStr += line.split(';')[0] 

fileContentList = fileContentStr.split() 

두 번째 방법은 매우 빠릅니다. 첫 번째 파일 (별개의 파일에 별도의 함수가 있음)은 매우 느리며 무엇이 누락 되었습니까? 모든 힌트를 주셔서 감사합니다

+1

, 뭔가 나에게 알려주에 대한 링크 당신 * 힘 *로 문자열을 연결하면 CPython을가하는 최적화를 놓치게 될'+ ='에서 기능 케이스. 최적화를 사용하지 못하게하는 실제 상황을 기억하지 못합니다. 차이가 아직 있는지 보려면 문자열을 반환하는 문자열 목록을 만들어보십시오. –

+0

@JimFasarakisHilliard 도와 주신 덕분에 –

+1

'open with'줄 아래서,'fileContentList = [line.split (';') [0]과 같은 list comprehension을 사용하여 트림 된 줄의 목록을 만들 수 있습니다. –

답변

1

전역 변수보다 로컬 변수를 저장하는 것이 빠릅니다. 지역 변수는 고정 크기 배열에 저장되며 전역 변수는 실제 사전에 저장됩니다. 여기

더 깊이있는 다른 범인의 부재에서 answer

관련 문제