2014-09-29 1 views
0

에서 데이터를 읽을파이썬 CSV 모듈은 내가 파일의 형식은 다음 한 헤더

# Data set number 1 
# 
# Number of lines 4010 
# Max number of column 3 is 5 
# Blahblah 
# More blahblah 
1 2 1 110 
2 2 5 20 21 465 417 38 
2 1 2 33 46 17 
...... 
4010 3 5 1001 2010 3355 107 2039 
# Data set number 2 
# 
# Number of lines 4010 
# Max number of column 3 is 5 
# Blahblah 
# More blahblah 
1 2 1 110 
2 2 5 20 21 465 417 38 
2 1 2 33 46 17 
...... 

내가 검색 한 데이터 세트의 수, 라인 수, 열 (3)의 최대 수를 읽고 CSV를 찾을 수 있도록 노력하겠습니다 모듈은 헤더를 읽을 수 있지만 그 수의 헤더를 읽고 저장할 수 있습니까? 내가 한 일은

nnn = linecache.getline(filename, 1) 
nnnn = nnn(line.split()[4]) 
number = linecache.getline(filename, 3) 
number2 = number(line.split()[4]) 
mmm = linecache.getline(filename, 5) 
mmmm = mmm(line.split()[7]) 
mmmmm = int(mmmm) 
max_nb = range(mmmmm) 
n_data = int(nnnn) 
n_frame = range(n_data) 
singleframe = natoms + 6 

이와 같은 것입니다. csv 모듈을 사용하여 그 번호를 읽고 어떻게 저장할 수 있습니까? 'singleframe'을 사용하여 6 개의 헤더 라인을 건너 뛰었지만 csv 모듈이 6 개의 헤더 라인을 읽을 수 있는지 궁금했습니다. 감사합니다.

+1

여기에 CSV가 필요하지 않습니다. – njzk2

+1

'linecache'가 당신을 위해 무엇을해야할지 확실하지 않습니다; 이것은 파이썬 소스 코드 인트로 스펙 션 도구이며 일반적인 패키지는 아닙니다. –

+0

@ njzk2 흠 그들은 단지 라인 캐시를 사용하고 라인 분할은 괜찮습니까? – exsonic01

답변

0

정말 CSV 파일이 없습니다. 당신은 독점적 인 형식을 가지고 있습니다. 그냥 빠르게 원하는 데이터를 추출하는 정규 표현식을 사용하여, 직접 구문 분석 다음 linecache 모듈을 사용하지 마십시오

import re 

set_number = re.compile(r'Data set number (\d+)'), 
patterns = { 
    'line_count': re.compile(r'Number of lines (\d+)'), 
    'max_num': re.compile(r'Max number of column 3 is (\d+)'), 
} 

with open(filename, 'r') as infh: 
    results = {} 
    set_numbers = [] 

    for line in infh: 
     if not line.startswith('#'): 
      # skip lines without a comment 
      continue 

     set_match = set_number.match(line) 
     if set_match: 
      set_numbers.append(int(set_match.group(1))) 
     else: 
      for name, pattern in patterns.items(): 
       match = pattern.search(line) 
       if match: 
        results[name] = int(match.group(1)) 

. 전체 파일을 메모리로 읽어 들이고 실제로는 파이썬 소스 파일에 액세스하기위한 것입니다. 추적을 인쇄해야 할 때마다이 모듈은 현재 스택과 관련된 소스 파일을 캐시합니다. 임의의 줄이 필요한 작은 파일에만 반복적으로 사용합니다.

+0

라인 캐시에 대한 제안에 감사드립니다. 내 파일에서 데이터 세트 번호는 배열이되지만 행 수와 열 3의 최대 수는 단일 숫자입니다. 어떻게 보관할 수 있습니까? 'nlines = 4010' – exsonic01

+0

@ user1798797 : 모든 '데이터 세트'행을 읽을 필요가 있다는 것을 의미합니까? –

+0

@ user1798797 : 코드는 * 모든 *'데이터 세트 '번호를 읽고 목록으로 수집합니다. –

관련 문제