解释基本Python程序

解释基本Python程序,python,Python,我正在读一本关于基本python的书,需要帮助翻译这个程序。 这将是我的第一个节目,所以请不要嘲笑我 我需要一个循序渐进的指南;当我单击“打印”时,它显示fname not found 您必须定义变量fname,这是您从来没有定义过的,所以定义它,它应该可以工作。此外,在将来还将发布您收到的错误fname是您正在检查的文件名是否存在。如果它不存在,则创建它。但是,在Python3.7中有更简单的方法来执行上述操作,您必须定义变量fname。要在Python中定义变量,只需说variable\u

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

我需要一个循序渐进的指南;当我单击“打印”时,它显示
fname not found



您必须定义变量fname,这是您从来没有定义过的,所以定义它,它应该可以工作。此外,在将来还将发布您收到的错误

fname是您正在检查的文件名是否存在。如果它不存在,则创建它。但是,在Python3.7中有更简单的方法来执行上述操作,您必须定义变量
fname
。要在Python中定义变量,只需说
variable\u name=variable\u value
。如果我输入
moo='cow'
,稍后当我输入moo时,它将返回cow。在你的情况下,它将是

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
顺便说一下,如果文件路径错误,循环将继续打印“错误”。您还必须将
raw\u input()
放入其中。你可能想看看这个。那里有教程和文档


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

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

fname = raw_input("enter file name: ")
在while循环中。因此,首先提示用户输入filename,然后检查它是否存在,如果存在,则再次提示用户,否则将中断循环并执行其余代码

#!/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'

你的程序有错误。您必须设置
fname
的值,否则会出现如下错误:

NameError:未定义名称“fname”


这里的所有答案都已经说明了您收到错误消息的原因。因此,我将主要集中于对程序的逐行解释

    #!/usr/bin/env python
这一行指定该文件是一个python脚本,并指定正在使用哪个python环境

为了更好地理解,请阅读以下内容:

下一行是

   # 'makeTextFile.py -- create text file'
这是一个注释行,用于指定当前脚本的功能

    import os
    ls = os.linesep
此行正在导入名为os的模块。 模块是由Python代码组成的文件。模块可以定义函数、类和变量。在这种情况下,导入的模块提供了一种使用操作系统相关功能的方法。 然后存储文件(特定于该操作系统)中使用的行分隔符(分隔一行和另一行的字符串)。 请在此处阅读操作系统模块:-

在这一步之后,您必须获得其中一个答案中所述的fname(在循环内部)。”fname'是存储要创建的文件名的变量

   while True:
       if os.path.exists(fname):
           print "ERROR: '%s' already exists" % fname
       else:
           break 
这是一个while循环(一个重复的代码块,一直持续到条件(此处为True)为True)。它检查是否存在具有该特定名称的文件。这是在os.path操纵器的帮助下完成的。如果存在,则会在(If:)块内打印一个错误,此循环将重复,直到遇到不存在的文件名为止。在这种情况下(文件名不存在),会遇到中断,从而中断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()
文件以“写入”模式打开。模式指定打开文件的目的。这里,“w”指定打开的文件仅用于写入目的。打开的文件由变量fobj访问。然后,下一行将所有(列表)的内容写入文件for x in all'遍历列表中的每个项目。然后写入x和行分隔符(存储在ls中)。最后,在写入所有内容后,关闭文件

然后作者打印

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

如能纠正,将不胜感激

您需要定义fname 尝试:


编辑: 同样,正如许多人在这篇文章中所说的,对运行你不理解的程序要谨慎。从一本经过验证的书上看通常是安全的,但在做任何事情之前,请确保您完全理解您正在运行的程序


利奥·科尼利厄斯(HTH)
简单化的熊猫(不要问)

谢谢,顺便问一下我是如何定义它的,我只是做fname=something吗?这个代码是做什么的exactly@libanshire:运行您不理解的代码不是一个好主意,尤其是当它处理文件I/O时。实际上,此代码检查以确保文件不存在,然后使用文件名创建一个新文件,并填充用户的输入。技术上正确,但是不懂编程/不熟悉编程的人可能不会明白你的意思。另外,这真的很短。请澄清和扩展。我明白,唯一要学习的是复制、粘贴和玩代码,所以这就是我正在做的。当我编写这段代码时,它似乎处于一个无限循环中,这就是它的设计目的吗?@libanshire阅读我的答案。我解释说,如果文件存在,那么它会不断循环告诉您它存在。那么它会在文件中写入用户输入?顺便问一下,文件在哪里?那个我怎么写呢?@liban:就在while语句之前,写为filename='test.txt',现在程序运行后,它会在同一个目录中创建test.txt。如果通过单击右键标记inf得到相同的答案,则接受并关闭该答案
   print 'DONE'
fname = raw_input ('Enter file name > '