2012-06-09 3 views
0

왜 그런지 모르지만 file.read()로 파일을 읽으려고 할 때 파이썬은 파일의 첫 번째 행을 인식하지 못합니다. 이것은 인터프리터 버그이거나 내 잘못입니까?file.read()가 첫 번째 행을 읽지 않는 이유는 무엇입니까?

if wfile.readline() != "#! /usr/bin/env python\n": 
    before = wfile.read() 
    wfile.seek(0) 
    wfile.write('#! /usr/bin/env python\n' + before) 
    wfile.close() 
    os.chmod(file, 777) 
내가 테스트를 위해 사용

파이썬 버전은 파이썬입니다 :이 문제를 일으키는 코드가 http://pastebin.ubuntu.com/1032832/

:

당신은 (읽기 결과 표시) 여기에 프로그램의 복사본이 iOS (Cydia 포트) 2.5.1. 내 장치는 iPad 2입니다.

답변

6

함수를 사용하여 파일의 첫 번째 줄을 if -statement에서 읽는 중입니다. read()에 도달하면 첫 번째 줄이 이미 읽혀집니다.

이어서 write()은 무엇을 읽었는지 쓸 것입니다. wfile.read().

파일의 첫 번째 줄에 적절한 #!/usr/bin/... 행이 포함되어 있는지 확인하려는 것 같습니다. 그렇지 않다면, 현재 첫 번째 줄 앞에 삽입하고 원본 첫 줄을 그 아래에 쓰려고합니다. 이것은 그것을 할 것입니다 :

with open(file, 'r+') as wfile: 
    before = wfile.readline() 
    if before != "#! /usr/bin/env python\n": 
     wfile.seek(0) 
     wfile.write('#! /usr/bin/env python\n' + before) 

나중에 사용하기 위해 변수 before에서 원래의 첫 번째 줄을 저장 이쪽으로.

: 작업을 완료, 또는 예외가 발생할 때 with자동에 대한 파일을 닫습니다 사용.

+0

하지만 file.seek (0)을 사용했습니다! 그럼 뭐가 잘못 됐어? – espectalll

+1

아, 잠깐 ... 고마워! :) – espectalll

0
import os 

file_name = 'foo.py' 
shebang = '#!/usr/bin/env python' 

with open(file_name, 'r') as f: 
    lines = f.read().splitlines() 
if shebang not in lines[0]: 
    lines.insert(0, shebang) 
    with open(file_name, 'r+') as f: 
     f.write('\n'.join(lines)) 

os.chmod(file_name, 777) 
관련 문제