2013-09-27 5 views
0

나는 세 줄의 텍스트 파일을 가지고 있습니다. 그 세 줄을 L1, L2 및 L3으로 읽고 L1, L2 및 L3의 문자 을 n1, n2 및 n3으로 계산합니다. 다음과 같이 으로 시도했습니다.파일을 읽고 개별적으로 파일의 각 줄을 가져 오는 중

 f=open(sys.argv[1],'r') 
    L1=f.readline() 
    L2=f.readline() 
    L3=f.readline() 
    if L1[-1]=='\n': L1=L1[:len(L1)-1] 
    if L2[-1]=='\n': L2=L2[:len(L2)-1] 
    if L3[-1]=='\n': L3=L3[:len(L3)-1] 
    n1=len(L1); n2=len(L2); n3=len(L3) 
    print L1, n1, L2, n2, L3, n3 

위의 스크립트는 정상적으로 작동합니다. 그러나 L1, L2 및 L3을 얻는 방법이 더 좋고/더 쉽다고 알기를 원했습니다. 미리 감사드립니다!

답변

1

이 방법에 대해 :

with open(sys.argv[1]) as f: 
    L1, L2, L3 = (line.rstrip() for line in f.readlines()[:3]) 

하지만 당신이 정말로 사용해야 목록 ...

0

내 생각에 가장 좋은 방법은 배열에 넣는 것입니다. 나는 파이썬을 사용 해달라고하지만 병이 C++로하는 일 이잖아

0

확인 ..

lines = [] 
with open(sys.argv[1], "r") as file: 
    for line in file.readlines(): 
     if line[-1] == "\n": 
      line = line[:-1] 
     lines.append(line) 

당신이 파일에 얼마나 많은 라인 문제가되지 않습니다 이쪽으로. 프로그램이 끝날 때까지 계속 실행됩니다.

0

stackoverflow에서 검색 한 코드가 더 간단합니다. 그것은 배열로 내용을 저장합니다

with open(fname) as f: 
    content = f.readlines() 

당신이 \ n을 제거하려면 다음

with open(fname) as f: 
    content = [line.strip() for line in f] 
1

을 당신 수 :

  • 추가 예외 처리를위한 시도 - 캐치 IO 오류를 사용하여 파일을 열고 읽는 데 문제가 있습니다. Errors and Exceptions Tutorial을 참조하거나 다른 답변에서 제안한대로 최신 버전의 Python에 with 문을 사용하십시오.
  • try-catch IndexError를 사용하여 예외 처리를 추가하여 인수가 충분하지 않은 경우를 처리합니다.
  • 간결성을 위해 string.rstrip 또는 string.strip을 사용하여 개행을 확인하십시오.
  • 다른 답변에서 제안한대로 값을 배열에 저장하십시오. 잘못된 파일을 가져 와서 매우 큰 파일을 메모리로 읽어 들이기 위해 3 줄 이후에 종료 할 수 있습니다.
관련 문제