2013-05-08 3 views
3

두 개의 텍스트 파일이 간격으로 구분 된 열로 구성되어 있습니다. 내가 계산하는 데 사용하는 코드파이썬을 사용한 텍스트 파일의 열 개수 계산

FileA와

1 1742.420 -0.410 20.1530 0.4190 1.7080 0.5940 
2 1872.060 0.070 21.4710 0.2950 0.0670 0.3380 
3 1918.150 0.150 18.9220 0.0490 1.4240 0.1150 
4 1265.760 0.170 19.0850 0.0720 1.3330 0.1450 
5 308.880 0.220 20.5020 0.1570 0.0200 0.1720 
.... 

FileB

1 1198.367 6.465 15.684 0.015 3.119 0.140 1 
2 1451.023 6.722 17.896 0.031 0.171 0.041 1 
3 1032.364 6.788 18.895 0.074 -0.084 0.088 1 
4 984.509 7.342 19.938 0.171 0.043 0.322 1 
5 1068.536 7.369 19.182 0.091 0.486 0.143 1 
.... 

당신이 FileA와 7 열이와 FileB 8.이있다 볼 수 있듯이된다 다음은이 두 파일의 발췌 열 :

import csv 
file = 'filename' 
reader = csv.reader(file) 
num_cols = 0 
for col in reader: 
    num_cols = num_cols + 1 

이 작은 코드는 FileA (7)의 열 수를 올바르게 제공하지만 FileB (또한 7 제공) 어떻게 됐어, 어떻게 고칠 수 있습니까?

열 대신 행을 계산하는 경우 : 1- 어떻게 열을 계산합니까? 내 실제 파일에 수천 줄/행이 있다고 가정 할 때 왜이 결과를 얻는가?

+3

행을 세고 있습니다. –

+0

실제 텍스트 파일에는 수천 줄/행이 있으므로 다른 일련의 질문을 제기하는 행을 계산하는 경우 – Gabriel

+0

@MartijnPieters가 정확합니다. 당신은'리더기에 토끼를 위해서 '라고 말할 수 있습니다. 그리고 여러분은 여전히 ​​칼럼이 아닌 행을 볼 것입니다. 다른 사람들이 제안한 것처럼 첫 번째 행의 요소를 계산하십시오. – mrKelley

답변

9
import csv 

with open('filename') as f: 
    reader = csv.reader(f, delimiter=' ', skipinitialspace=True) 
    first_row = next(reader) 
    num_cols = len(first_row) 
+0

-이 코드는 항상 1 -을 반환합니다. 마지막 편집이 수정되었습니다! – Gabriel

+0

여기서'iter()'를 사용할 필요가 없습니다; 'csv.reader()'객체는 직접 반복 가능합니다. –

+0

@MartijnPieters : 확실하지 않았습니다. 'next ([1, 2, 3]) '에서 오류를 추정했습니다. 당신은 맞습니다. -'다음 (csv.reader ([ 'a, b, c']))'괜찮습니다. – Eric

1

을 사용하여 모든 공백이 아닌 부품을 찾기 위해 분할, 단지 첫 번째 라인을 읽고들을 수 :

with file("bla") as f: 
    line = f.readline() 
print len(line.split()), "columns" 
0

단지 첫 번째 행의 길이를 얻을!

import csv 
file = 'my_File.csv' 
reader = csv.reader(open(file,'rb'),delimiter=" ") 
num_cols = len(next(read)) 
+0

['csv.reader'] (http://docs.python.org/2/library/csv.html#csv.reader)가 파일 이름을 사용한다고 생각하지 않습니다. 또한 이것은 일반적인 CSV가 아니므로 구문 분석을 위해 추가 구성이 필요합니다. – Eric

+0

또한 python 3은'next (i)'를 위해'i.next()'를 비추천/제거합니다. – Eric

+0

2.7을 사용하는 데 대한 단서가 없었습니다. 그리고 예. 그것은 오타였습니다. 나는'open'을 추가하는 것을 잊었습니다. –