python写文件语法错误

时间:2012-05-09 14:50:20

标签: python string syntax

只是学习python并尝试编写一个脚本,允许用户更改文本中的行。出于某种原因,当提示用户输入要替换的行的内容时,我收到此错误:

追踪(最近一次通话):   文件“textedit.py”,第10行,in     f.write(线1) AttributeError:'str'对象没有属性'write'

和脚本本身:

f = raw_input("type filename: ")
def print_text(f):
    print f.read()
current_file = open(f)
print_text(current_file)
commands = raw_input("type 'e' to edit text or RETURN to close the file")

if commands == 'e':
    line1 = raw_input("line 1: ")
    f.write(line1)
else:
    print "closing file"
    current_file.close()

4 个答案:

答案 0 :(得分:4)

改变这个:

f.write(line1)

进入这个:

current_file.write(line1)

发生错误,因为您正在访问f,就好像它是一个文件一样,但它只是用户提供的文件名。打开的文件存储在current_file变量中。

此外,您正在以读取模式打开文件。看看open()'s documentation

  

open(name[, mode[, buffering]])

     

mode最常用的值是 'r'用于阅读'w'用于写入(如果文件已存在则截断文件),以及{ {1}}用于追加(在某些Unix系统上意味着所有写入都附加到文件的末尾,而不管当前的搜索位置如何)。 如果省略模式,则默认为'a'

答案 1 :(得分:1)

你应该这样做:

current_file.write(line1)

发生什么事了?您将文件名存储在f中,然后打开了一个文件对象,存储在current_file中。

错误消息试图告诉您:f是一个字符串。字符串没有write方法。在第10行,您尝试在存储在变量write中的对象上调用方法f。它无法运作。

学习编程将涉及学习阅读错误消息。别担心。随着你的进展,它会变得更容易。

答案 2 :(得分:1)

改变这个:

current_file = open(f)

到这一个:

current_file = open(f, 'w')

和此:

f.write(line1)

为:

current_file.write(line1)

答案 3 :(得分:0)

您尝试在writef这是一个字符串(包含raw_input()结果),而您应该在文件上写入。此外,它被认为更pythonic和更好的做法使用with语句打开文件,因此您将确保您的文件将在任何可能的情况下关闭(包括意外错误!):

python 3.x:

def print_from_file(fname):
    with open(fname, 'r') as f:
        print(f.read())

f = input("type filename: ")
with open(f, 'w') as current_file:
    print_from_file(f)
    commands = input("type 'e' to edit text or RETURN to close the file")
    if commands == 'e':
        line1 = input("line 1: ")
        current_file.write(line1)
    else:
        print("closing file")

python 2.x:

def print_from_file(fname):
    with open(fname, 'r') as f:
        print f.read()

f = raw_input("type filename: ")
with open(f, 'w') as current_file:
    print_from_file(f)
    commands = raw_input("type 'e' to edit text or RETURN to close the file")
    if commands == 'e':
        line1 = raw_input("line 1: ")
        current_file.write(line1)
    else:
        print "closing file"