2016-07-15 3 views
0

간단한 파이썬 텍스트 편집기를 만드는 초보자로서 처음에는 파일을 열 때 read_file() 함수로 텍스트 파일을 인쇄 할 수있는 혼란스러운 버그가 발생했습니다. write_file()을 사용하여 텍스트 파일을 수정 한 후 파일을 다시 읽으면 공백이 반환됩니다.간단한 텍스트 편집기 (Python)의 버그 버그

또한 내 코드에 대한 비판은 인정 될 것입니다. 고맙습니다.

import os 


def main(): 
    file = open_file() 
    quit = False 
    while quit == False: 
     print('Current file open is {}'.format(file.name)) 
     print('(\'read\', \'write\', \'rename\', \'change file\', \'quit\',)') 
     action = raw_input('> ') 
     if str(action) == 'read': 
      read_file(file) 
     elif str(action) == 'write': 
      file = write_file(file) 
     elif str(action) == 'rename': 
      file = rename(file) 
     elif str(action) == 'change file': 
      file.close() 
      open_file() 
     elif str(action) == 'quit': 
      break 
     else: 
      print('Incorrect action.') 



def open_file(): 
    print('Create/open a file') 
    filename = raw_input('Filename: ') 
    try: 
     file = open(str(filename), 'r+') 
     return file 
    except: 
     print('An error occured') 
     return open_file() 



def read_file(file): 
    try: 
     print('{}, {}'.format(file.name, file)) 
     print(file.read()) 
    except: 
     print('An error occured') 
    return None 


def write_file(file): 
    print('Type to start writing to your file.') 
    #read_file(file) 
    add_text = raw_input('> ') 
    file.write(str(add_text)) 
    return file 


def rename(file): 
    new_name = raw_input('New file name: ') 
    os.rename(file.name, str(new_name)) 
    return file 


main() 

답변

1

우선, 파일은 소정의 패키지; 변수 이름으로 사용하지 마십시오. 일부 기능을 사용하는 데 문제가있을 수 있습니다. my_file 또는 C 언어 fp ("파일 포인터"의 경우)을 시도하십시오.

파일에 새 정보를 기록한 후에는 위치 포인터 (책갈피)가 파일 끝에있을 가능성이 큽니다. 더 많은 것을 읽으면 아무데도 갈 수 없습니다. 파일을 닫고 다시 열거 나 fp.seek()를 호출하여 원하는 위치로 이동해야합니다. 예를 들어, fp.seek (0)은 포인터를 파일의 시작으로 재설정합니다.

+0

나는'file'을 변수 이름으로 사용하는 것이 좋습니다. 거의 사용되지 않으며 사용 된 범위에만 영향을 미칩니다. –

0

파이썬으로 파일을 읽고 쓰는 데있어 파일을 변경 한 후에 (filename).close() 메서드를 호출하지 않으면 여전히 생각하고 있기 때문에 아무 것도 저장하지 않습니다. 또는 b) 여전히 그것을 읽으십시오!

희망이 도움이됩니다.