2012-11-18 2 views
0

아래 코드를 사용하여 텍스트 파일의 총 줄 수를 얻으려고합니다.카운터 결과를 가져올 때 AttributeError가 발생하지만 일반 정수가 아닙니다.

totallines = 0 
for line in infile: 
    totallines += 1 

제대로 작동하고 올바른 번호를 셸에 인쇄 할 수 있습니다. I가 결과를 할당 할 때, : 나는 라인 카운터를 제거하고로 교체하는 경우,

item[i] = item[i].lower() 

그러나 :

item = [0]*totallines 

와 소문자로 지정된 라인을 강제 할 때 나는 AttributeError를 얻을 수 텍스트 파일의 줄 수. 그것은 완벽하게 작동합니다.

어떻게 해결할 수 있습니까?

+3

'item = [0] * totallines', 그래서'0lower()'는 무엇을 의미합니까? –

+0

item = [0] * 24 그래도 나에게 혼란 스럽다. – user1724602

+0

글쎄, 정확한 코드를 게시하지 말고,'lower()'는 문자열 메소드이고 문자열에서만 작동합니다. 그러므로'item'은 정수가 아닌 문자열을 포함해야합니다. –

답변

3

입력 파일의 줄을 소문자로 변환하고 결과를 배열에 저장하려는 것처럼 들립니다. 당신은 이런 식으로 할 수있는 :

with open('myfile.txt', 'r') as infile: 
    items = [line.lower() for line in infile] 

또는을 (다소)가 동등하게, (이것은 각 줄의 끝에 "\ n을"방울) :

with open('myfile.txt', 'r') as infile: 
    items = infile.read().lower().splitlines() 

주 : 안 함을 변수 이름으로 file을 사용하십시오. 왜냐하면 file 타입이 내장되어 있기 때문입니다.

+0

그리고 나중에'totallines = len (items)'... – martineau

+1

@Joel Cornett : 사람들은 항상 명시 적으로 참조 할 필요가 없으므로 항상'file'을 사용합니다. 그래서 대개는 숨기는 것이 중요하지 않습니다. – martineau

+0

@martineau : 의미가 있습니다. 비슷한 방법으로'string' 모듈을 가져 오기가 거의 없기 때문에 항상'string'을 사용합니다. –

0

나는 당신이 성취하려는 것을 완전히 모릅니다. item = [0]*totallines의 목적은 무엇입니까? 그러면 totallines과 길이가 같은 0의 목록이 생성됩니다. 내장을 사용하여,

item = [] 
for line in infile: 
    item.append(line) 

print(item[5].lower()) 

또는 더 간결 : 주어진 라인 (예를 들어, 여섯 번째 선) 목록에 파일을 복사 및 액세스하려면

, 이것은 당신이 그것을하는 방법이다 in item = [0, 0, ...] 0,`item [i] = 0` 인 경우, 파일 객체의 메소드에서 :

item = infile.readlines() 
print(item[5].lower()) 
관련 문제