You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:22:45