我正在读一本关于基本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'
答案 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'未定义