0

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

Traceback(最近一次调用最后一次):文件“textedit.py”,第 10 行,在 f.write(line1) 中 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

4 回答 4

4

改变这个:

f.write(line1)

进入这个:

current_file.write(line1)

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

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

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

最常用的值mode'r'读取'w'写入(如果文件已经存在则截断文件)和'a'追加(在某些 Unix 系统上,这意味着所有写入都附加到文件末尾,而不管当前的查找位置如何) . 如果省略模式,则默认为'r'.

于 2012-05-09T14:52:04.797 回答
1

你应该这样做:

current_file.write(line1)

发生了什么?您将文件名存储在f其中,然后用它打开了一个文件对象,该文件对象存储在current_file.

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

学习编程将涉及学习阅读错误信息。不用担心。随着您的进行,它会变得更容易。

于 2012-05-09T14:52:03.313 回答
1

改变这个:

current_file = open(f)

对此:

current_file = open(f, 'w')

和这个:

f.write(line1)

至:

current_file.write(line1)
于 2012-05-09T14:52:12.830 回答
0

您正在尝试writefwhich 上是一个字符串(包含raw_input()结果),而您可能应该在文件上写入。此外,它被认为更符合 Python 风格,并且是使用with语句打开文件的更好做法,因此您可以确保文件在任何可能的情况下都会关闭(包括意外错误!):

蟒蛇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")

蟒蛇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"
于 2012-05-09T14:58:11.410 回答