2012-02-29 3 views
0

나는 기본적인 파이썬에 관한 책을 읽고 있는데,이 프로그램을 번역하는데 도움이 필요하다. 첫 번째 프로그램이되므로 제발 웃지 마세요.기본 파이썬 프로그램 해석하기

이 단계별 가이드가 필요합니다. 인쇄를 클릭하면 fname not found가 표시됩니다.


#!/usr/bin/env python 

# 'makeTextFile.py -- create text file' 

import os 
ls = os.linesep 

# get fileneame 
while True: 

    if os.path.exists(fname): 
     print "ERROR: '%s' already exists" % fname 
    else: 
     break 

# get file content (text) lines 
all = [] 
print "\nEnter lines (' . ' by itself to quit). \n" 

# loop until user terminates input 
while True: 
    entry = raw_input('> ') 
    if entry == '.': 
     break 
    else: 
     all.append(entry) 

# write lines to file with proper line-ending 
fobj = open(fname, 'w') 
fobj.writelines(['%s%s' % (x, ls) for x in all]) 
fobj.close() 
print 'DONE' 
+1

첫 번째 프로그램 인 경우 조금 야심적입니다. 보다 복잡한 입출력 형식 인 파일 조작을 시도하기 전에 주어진 프로그래밍 언어에서 기본 입/출력을 더 잘 이해해야합니다. – Edwin

답변

0

당신은 당신이 결코 변수 FNAME을 정의, 그래서 그것을 정의해야하고 그것을 작동합니다. 또한 미래도 오류를 게시 당신은

+0

고마워, 내가 정의하는 방법에 의해, 그냥 fname = something합니까? 이 코드는 정확히 –

+0

@ libanshire : 당신이 이해하지 못하는 코드를 실행하는 것은 좋지 않습니다. 특히 파일 I/O를 처리 할 때 특히 그렇습니다. –

-1

에 fname 당신은 변수 fname을 정의 할 필요가 당신은 당신의 코드

+0

기술적으로는 올바르지 만 프로그래밍을 이해하지 못하거나 새로 익숙하지 않은 사람은 메시지를받지 못할 것입니다. 게다가, 이것은 정말로 짧습니다. 명확히하고 확장하십시오. – Edwin

+0

나는 배우기 만하면 복사와 붙여 넣기가 가능하며 코드로 놀아서 그게 내가하는 일이라는 것을 알고있다.이 코드를 프로그램 할 때 무한 루프에있는 것처럼 보입니다. –

+0

@libanshire 내 대답 읽기. 나는 파일이 존재한다면, 그것이 존재한다는 것을 말해 주면서 계속 반복한다고 설명했다. – CoffeeRain

2

에서 확인되는 실존있는 파일 이름을 얻는다. 파이썬에서 변수를 정의하려면, 그냥 variable_name=variable_value이라고 말하면됩니다. 나중에 moo='cow'을 입력하면 나중에 moo를 입력하면 암소가 반환됩니다. 귀하의 경우에, 그것은 ...

import os 

ls = os.linesep 
fname=raw_input('File path: ') 

while True: 
    if os.path.exists(fname): 
    print "ERROR: '%s' already exists" % fname 
    fname=raw_input('File path: ') 
    else: 
    break 

그런데 파일 경로가 틀리면 루프는 "ERROR"인쇄를 계속합니다. 내부에 raw_input()을 넣어야합니다. docs을보고 싶을 수도 있습니다. 거기에 자습서와 설명서가 있습니다.

이 코드의 기능은 파일이 존재하지 않는지 여부를 확인한 다음 파일이없는 경우 파일 이름으로 새 파일을 만든 다음 사용자 입력을 파일에 씁니다.

+0

사실,이 코드는 파일이 존재하지 않는지 확인한 다음 파일 이름이 새 파일을 만들고 사용자 입력으로 채워집니다. – Edwin

+0

@Edwin tThanks. – CoffeeRain

1

동일한 책을 사용하면 같은 문제가 발생합니다. 작성자 작성을 잊어 버렸습니다.

fname = raw_input("enter file name: ") 

while 루프 내에 있습니다. 그래서 먼저 사용자가 filename을 입력 한 다음 존재하는지 확인하고, 존재한다면 다시 사용자에게 프롬프트를 표시하거나 루프를 중단하고 나머지 코드를 실행하라는 메시지를 표시합니다.

-1

프로그램에 오류가 있습니다. 아래와 같이 그렇지 않으면 오류가 발생합니다, fname의 값을 설정해야한다 : 당신이 오류 메시지가 왜 여기

NameError: name 'fname' is not defined

0

모든 해답이 이미 언급했다. 그래서, 저는 주로 프로그램의 라인 별 설명에 중점을 둘 것입니다.

#!/usr/bin/env python 

이 줄은 파일이 파이썬 스크립트이고 또한 어떤 파이썬 환경이 사용되고 있는지를 지정합니다.

더 나은 이해를 위해이 읽기 :

Why do people write #!/usr/bin/env python on the first line of a Python script?

다음 줄이이 현재 스크립트가 수행하는 작업을 지정하는 주석 행입니다

# 'makeTextFile.py -- create text file' 

입니다.

import os 
    ls = os.linesep 

이 줄은 os 모듈을 가져옵니다. 모듈은 파이썬 코드로 구성된 파일입니다.모듈은 함수, 클래스 및 변수를 정의 할 수 있습니다.이 경우 가져온 모듈은 운영 체제 종속 기능을 사용하는 방법을 제공합니다. 그런 다음 운영 체제와 관련된 파일에 사용되는 줄 구분 기호 (한 줄을 다른 줄로 구분하는 문자열)를 저장합니다. 여기에 운영 체제 모듈에 대한 읽기 - https://docs.python.org/2/library/os.html

이 단계 후에는 대답 중 하나에 명시된 바와 같이 (루프 내부)에 FNAME를 얻을 수 있습니다. 'fname'은 생성 될 파일 이름이 저장되는 변수입니다.

while True: 
     if os.path.exists(fname): 
      print "ERROR: '%s' already exists" % fname 
     else: 
      break 

이것은 while 루프 (조건이 참일 때까지 계속되는 반복 코드 블록)입니다. 특정 이름의 파일이 있는지 확인합니다.이 작업은 os.path 조작자의 도움으로 수행됩니다. 존재한다면, if (if :) 블록 내부에 인쇄되는 Error가 존재하며, 존재하지 않는 파일 이름이 나타날 때까지이 루프가 반복됩니다. 이 경우 (파일 이름이 존재하지 않음) while 루프에서 빠져 나오는 break가 발생합니다.

all = [] 

이렇게하면 all이라는 목록 데이터 구조가 지정됩니다. 이 선언의 동기는 모든 사용자 입력을 저장한다는 것입니다.

print "\nEnter lines (' . ' by itself to quit). \n" 

이 자신의 message.It 그들에게 기대 것과 같은 사용자에게 힌트 입력에 사용자를 제안 인터프리터 화면에 선을 인쇄합니다. 또한 '.'입력을 종료하도록 지정합니다. 만.

while True: 
     entry = raw_input('> ') 
     if entry == '.': 
      break 
     else: 
      all.append(entry)  

이것은 반복적으로 사용자 입력을 받아서 목록에 추가하는 또 다른 루프입니다. 단일 '.' 루프가 끊어지고 사용자 입력이 끝났습니다. 다음 단계는 파일에 기록하는 것입니다. 다음 코드 세트는 그 목적으로 작성되었습니다.

fobj = open(fname, 'w') 
    fobj.writelines(['%s%s' % (x, ls) for x in all]) 
    fobj.close() 

파일이 '쓰기'모드로 열립니다. 모드는 파일이 열리는 목적을 지정합니다. 여기에서 'w'는 파일이 쓰기 목적으로 만 열리도록 지정합니다. 열린 파일은 fobj 변수로 액세스됩니다. 다음 줄은 all (목록)의 내용을 파일에 씁니다. 'for all in'은 목록 안의 각 항목을 반복합니다. 그러면이 x와 줄 분리 기호 (ls에 저장 됨)가 기록됩니다. 마지막으로 모든 내용이 기록 된 후 파일이 닫힙니다.

저자는 그것은 단지 전체 작업이 끝난 것을 알 수

print 'DONE' 

를 인쇄합니다. 이는 중복 된 단계이므로 피할 수 있습니다.

접근법의 수정은 인정 될 것이다.