只是学习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()
答案 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)
您尝试在write
上f
这是一个字符串(包含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"