2017-11-29 14 views
1

다음과 같은 데이터 파일이 있습니다.전체 파일을 한 줄로 읽는 파이썬

Index Code Pos1 Strand Chr2 Pos2 length blocks 
1 G32_bkd.ctx:Vu01(old4) 62739 47+9- Vu01(old4) 63651 790 0 
2 G32_bkd.ctx:Vu01(old4) 441403 10+0- Vu01(old4) 446263 4893 0 
3 G32_bkd.ctx:Vu01(old4) 450546 15+0- Vu01(old4) 451091 576 0 
4 G32_bkd.ctx:Vu01(old4) 459741 10+0- Vu01(old4) 460841 1068 0 
5 G32_bkd.ctx:Vu01(old4) 612262 14+0- Vu01(old4) 629013 16788 0 
6 G32_bkd.ctx:Vu01(old4) 688380 23+0- Vu01(old4) 693207 4872 0 
7 G32_bkd.ctx:Vu01(old4) 730643 12+0- Vu01(old4) 740497 7011 0 
8 G32_bkd.ctx:Vu01(old4) 834116 16+1- Vu01(old4) 835797 1752 0 

헤더 행을 별도로 읽은 다음 for 회 돌이에서 각 행을 읽고 싶습니다. 내 코드

나는 for 루프 내에서 print(line)을 확인
with open(file) as f: 
    title_line = f.readline() 
    for line in f: 
     line = line.strip() 
     cols = line.split() 

, 그것은 아무것도 인쇄되지 않습니다이다. 그러나 print(title_line)을 검사하면 파일의 정확한 형식을 유지하면서 전체 파일이 인쇄됩니다. 무엇이 잘못 되었습니까?

N.B. 그래서 전체 파일을 복사하여 붙여 넣은 다음 다른 이름으로 저장했습니다.

답변

0

파이썬이 원래 파일의 행 끝 문자를 좋아하지 않는 경우에 문제가 될 수있는 한 가지는 다음과 같습니다.

Linux에서 od -t a file | less을 사용하고 거기에있는 내용을 검사 할 수 있는지 확인하십시오. 파일이 다른 운영 체제 표준을 따르고 있습니까? 리눅스가 아닌 경우 파이썬 자체를 사용하여 각 문자를 ord으로 인쇄하여 사용중인 글꼴 (\ n, \ r, \ r \ n)을 확인할 수 있습니다.

  • 파이썬이 들어 유니버설 줄 바꿈 모드에서 파일을 열 수 있습니다 : 그런 경우에는

    , 당신은 몇 가지 옵션이 있습니다. 즉, "U"입니다 : 이를 확인하는 빠르고 쉬운 방법을의

    • open (file, "U")
    • 은 당신이 사용할 수있는, 참으로 문제이며 그것을 해결하지만,
  • 그렇지 않으면 장기적으로 권장되지 open 대신 io.open을 입력하고 newline= 인수를 사용하십시오. 기본값 인 None이 필요한 것입니다. 이 문제가 해결되지 않으면

제공하십시오

  • 운영 체제를 당신이
  • 원래의 소스 운영 체제를 사용하고
  • 파이썬 버전을 사용하는 파일

관련없는 보조 노트로, 파이썬에 내장 된 csv 모듈에서 파일을 읽는지 확인할 것을 제안합니다.그것은

참조

을합니다 ( csv 모듈 대신 쉼표의 공백이나 탭을 사용하도록 구성 할 수 있습니다) 꼭 맞는 것 같아
0

'yourfile.txt'파일이 있고 그 크기가 크지 않다고 가정합니다.

f = open('yourfile.txt','r') 

readline에서 title_line을 건너 뜁니다.

for line in f.readlines()[1:]: 
    line = line.strip() 
    cols = line.split() 
    # output the result 
    print ",".join(x for x in cols)