Python中能否将文件对象传入write函数实现文件复制及问题解析
Python文件内容写入:为什么不能直接传文件对象给write()?
当然可以实现把一个文件的内容写入另一个文件,但你当前的写法存在问题——write()函数并不接受文件对象作为参数,这就是第3行报错的原因。
为什么你的代码行不通?
当你用open()打开文件后,得到的f是一个_io.TextIOWrapper类型的文件对象,而file.write()方法的参数要求是字符串(文本模式下)或者字节对象(二进制模式下)。直接把文件对象传进去,Python会抛出TypeError: write() argument must be str, not _io.TextIOWrapper的错误,因为它不知道该如何处理一个文件对象。
正确的实现方式
这里给你几种常用的正确写法,按需选择:
1. 一次性读取写入(适合小文件)
直接读取源文件的全部内容,再写入目标文件:
# 打开源文件和目标文件 f = open("my", "r") j = open("allot", "w") # 读取全部内容并写入 content = f.read() j.write(content) # 手动关闭文件(一定要做,否则可能导致资源泄漏) f.close() j.close() # 验证结果 with open("allot", "r") as j: print(j.read())
2. 逐行读取写入(适合大文件)
如果文件很大,一次性读取会占用过多内存,逐行处理更高效:
# 使用with语句,自动管理文件关闭,更安全 with open("my", "r") as f, open("allot", "w") as j: # 逐行读取源文件,逐行写入目标文件 for line in f: j.write(line) # 验证结果 with open("allot", "r") as j: print(j.read())
3. 使用shutil模块直接复制(最简洁)
如果只是单纯复制文件内容,Python的shutil模块提供了现成的方法,不用自己处理读写:
import shutil # 直接复制源文件到目标文件 shutil.copyfile("my", "allot") # 验证结果 with open("allot", "r") as j: print(j.read())
小提示:优先使用with语句
不管用哪种写法,都推荐用with语句来打开文件——它会在代码块结束后自动关闭文件,避免因为忘记手动close()导致的文件资源泄漏问题。
内容的提问来源于stack exchange,提问作者S VISHNU
相关产品推荐
相关产品推荐

