2012-02-29 48 views
0

我正在阅读一本关于基本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' 
+1

如果这是您的第一个程序,那么您有点雄心勃勃。在尝试执行文件操作(这是更复杂的输入/输出形式)之前,您应该更好地理解给定编程语言中的基本输入/输出。 – Edwin 2012-02-29 16:19:35

回答

0

你必须定义变量FNAME你永远不会做,所以定义它,它应该工作。也是今后也发布错误你

+0

谢谢,顺便说一下,我如何定义它,我只是做fname =什么?这段代码究竟做了什么 – 2012-02-29 04:23:49

+0

@libanshire:运行你不明白的代码并不是一个好主意,特别是当它处理文件I/O时。 – 2012-02-29 15:52:40

-1

FNAME是其中的实存你在你的代码

+0

从技术上讲是正确的,但是不懂编程的人/对它来说是新手可能不会得到你的信息。另外,这真的很短。请澄清并扩大。 – Edwin 2012-02-29 16:17:05

+0

我明白,只有学习是复制和粘贴,并与代码一起玩,这就是我正在做的。当我编程这个代码时,它似乎处于一个无限循环中,它是为什么而设计的? – 2012-02-29 18:22:16

+0

@libanshire阅读我的答案。我解释说,如果文件存在,那么它会通过告诉你它存在而继续循环。 – CoffeeRain 2012-02-29 20:43:36

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 

顺便说一句,如果文件路径错误,你的循环将继续打印“错误”。你必须把raw_input()也放在里面。你可能想看看docs。那里有教程和文档。

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

+0

实际上,这段代码检查以确保文件_doesn't_不存在,然后用文件名创建一个新文件,并填充用户的输入。 – Edwin 2012-02-29 16:15:40

+0

@Edwin tThanks。 – CoffeeRain 2012-02-29 16:20:08

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' 
-1

您的程序出现错误。你应该有设置的fname的价值,否则你会得到一个错误,如下图所示:

NameError: name 'fname' is not defined

0

这里所有的答案已经说过为什么你得到一个错误信息。所以,我将主要关注该程序的逐行解释。

#!/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 :)块内打印一个错误,并且此循环重复,直到遇到不存在的文件名为止。在这种情况下(文件名不存在),会遇到中断while循环的中断。

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访问。下一行然后将所有(列表)的内容写入文件。 'for all in'遍历列表中的每个项目。然后写入这个x和行分隔符(存储在ls中)。最后,在写完所有内容后,文件关闭。

笔者然后打印

print 'DONE' 

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

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