我正在学习python,我编写了一个脚本,将一个文本文件的内容复制到另一个文本文件中。
这是我的代码。
from sys import argv
out_file = open(argv[2], 'w').write(open(argv[1]).read())
out_file.close()
我在标题上列出了AttributeError。为什么我在打开时调用write方法(argv [2],' w')out_file没有分配文件类型?
提前谢谢
答案 0 :(得分:4)
out_file
被分配给write
方法的返回值,即None
。将声明分成两部分:
out_file = open(argv[2], 'w')
out_file.write(open(argv[1]).read())
out_file.close()
实际上,最好这样做:
with open(argv[1]) as in_file, open(argv[2], 'w') as out_file:
out_file.write(in_file.read())
使用with
语句意味着当执行离开in_file
块时,Python将自动关闭out_file
和with
。
答案 1 :(得分:2)
out_file
绑定到{em>返回值write()
;它返回None
。
表达式open(...).write(...)
在打开的文件对象上调用write
方法,但在表达式完成后,将再次丢弃打开的文件对象本身。执行表达式时,只有堆栈引用它。
您希望将文件对象用作上下文管理器,并且它将自动关闭 :
with open(argv[2], 'w') as writefile, open(argv[1]) as readfile:
writefile.write(readfile.read())
with .. as ..
语句还将只是打开的文件对象绑定到名称,因此您现在可以直接处理这些对象。