解释基本的Python程序

时间:2012-02-29 03:14:35

标签: python

我正在读一本关于基本python的书,需要帮助翻译这个程序。 这将是我的第一个节目,所以请不要嘲笑我。

我需要一步一步的指导;当我点击打印并显示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'

7 个答案:

答案 0 :(得分:2)

您必须定义变量fname。要在Python中定义变量,只需说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。那里有教程和文档。

至于这段代码的作用,它会检查文件是否不存在,如果不存在,则会创建一个带有文件名的新文件,然后将用户的输入写入文件。

答案 1 :(得分:1)

我有同样的问题,使用同一本书。作者忘了插入

fname = raw_input("enter file name: ")

在while循环中。所以首先你提示用户输入文件名,然后检查它是否存在,如果存在,你再次提示用户,否则你打破循环并执行其余的代码。

#!/usr/bin/env python

import os
ls = os.linesep

# get file name that doesn't exist yet

while True:
    fname = raw_input("enter file name: ")

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

all = []
print "\n Enter lines ('.' by itself quit) .\n"

# enter lines one by one until user terminates
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()
print 'DONE'

答案 2 :(得分:1)

此处的所有答案都已说明您收到错误消息的原因。因此,我将主要关注该计划的逐行解释。

    #!/usr/bin/env python

此行指定该文件是python脚本,并指定正在使用的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的模块。 模块是由Python代码组成的文件。模块可以定义函数,类和变量。在这种情况下,导入的模块提供了一种使用操作系统相关功能的方法。 然后它存储文件中使用的行分隔符(将一行与另一行分隔开的字符串)(特定于该操作系统)。 在这里阅读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循环(一个重复的代码块,一直持续到条件(此处为True)为真)。它检查是否存在具有该特定名称的文件。这是在os.path操纵器的帮助下完成的。如果它存在,那么在(if :)块内打印一个Error,并且这个循环重复,直到遇到不存在的文件名。在这种情况下(文件名不存在),会遇到中断while循环的中断。

    all = []

这指定名为all的列表数据结构。此声明的动机是它将存储所有用户输入。

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

这会在解释器屏幕上打印一行,建议用户输入他们的消息。这是一个提示用户关于他们的期望。它还指定退出输入'。'仅

  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()

文件以“写入”模式打开。 Mode指定打开文件的目的。这里,'w'指定打开的文件仅用于写入目的。打开的文件由变量fobj访问。然后,下一行将所有(列表)的内容写入文件。 'for all in all'遍历列表中的每个项目。然后写入此x和行分隔符(存储在ls中)。最后,在写完所有内容后,文件将被关闭。

然后作者打印

   print 'DONE'

它只是表明整个工作已经结束。这是一个冗余步骤,可以避免。

该方法的更正将不胜感激。

答案 3 :(得分:0)

你必须定义你永远不会做的变量fname,所以定义它并且它应该工作。也将来也发布你得到的错误

答案 4 :(得分:0)

您需要定义fname 尝试:

fname = raw_input ('Enter file name > '

编辑: 此外,正如许多人在这个帖子上说的那样,对于运行你不理解的程序是很苛刻的。从经过验证的书籍通常是安全的,但请确保您完全理解您之前运行的程序。

Leo Cornelius(HTH) 简单的熊猫(不要问)

答案 5 :(得分:-1)

fname是您正在检查的文件的名称。如果它不存在则创建它。但是在python 3.7中有更简单的方法来执行所述操作

答案 6 :(得分:-1)

您的计划出现错误。您必须设置fname的值,否则您将收到如下所示的错误:

  

NameError:name' fname'未定义