【问题标题】:TypeError: write() argument must be str, not _io.TextIOWrapperTypeError: write() 参数必须是 str,而不是 _io.TextIOWrapper
【发布时间】:2018-10-02 04:44:10
【问题描述】:

如何将一个文件复制到另一个文件?

我使用的代码是:

FileX = open("X.txt","r")
FileY = open("Y.txt","w")
X = FileX
FileY.write(FileX)
FileX.close()
FileY.close()

这给出了错误:

TypeError: write() argument must be str, not _io.TextIOWrapper

如何解决这个错误?

【问题讨论】:

  • 你想达到什么目的?阅读X.txt的所有内容并写入Y.txt?
  • FileX 是一个文件对象,您正在将一个文件对象写入FileYFileY.write 接受str 而不是文件对象。
  • 您是否尝试将文件 X 的内容复制到文件 Y 中?

标签: python typeerror


【解决方案1】:

FileX 当前是一个文件指针,而不是X.txt 的上下文。要将X.txt的所有内容复制到Y.txt,需要使用FileX.read()写入FileX的读取内容:

FileY.write(FileX.read())

也许您还应该考虑使用with 语句,

with open("X.txt","r") as FileX, open("Y.txt","w") as FileY:
    FileY.write(FileX.read())
# the files will close automatically

也正如评论所建议的,您应该使用shutil 模块来复制文件和/或目录,

import shutil
shutil.copy('X.txt', 'T.txt')
# use shutil.copy2 if you want to make an identical copy preserving all metadata

【讨论】:

  • 或者更好:shutil.copy(x, y)
  • 谢谢,使用“import shutil”的第二个解决方案正在运行。但是使用 FileY.write(FileX.read()) 的第一个解决方案是行不通的。我复制了代码,我重命名了两个 txt 文件,但不是将内容从一个复制到另一个,而是从第一个文件中删除了内容。我忘了导入什么吗?
【解决方案2】:

str = FileX.readLines()

FileY.write(str)

,传递字符串而不是文件

【讨论】:

  • 'file'对象没有属性'readLines',而是'readline',方法readline()从文件中读取一整行。
  • 另外,不推荐使用str作为变量名,因为它会影响整个str-class。
  • 猜猜我需要多练习我的python,谢谢指正!
  • 文件对象没有名为 readLines 的方法,而是有一个名为 readlines 的方法,它返回从 readline 读取的行列表,直到引发 EOF,这基本上只是文件中所有行的列表,但这在当前上下文中无效,因为您不能将列表作为参数传递给文件对象的write 方法。您应该永远将变量命名为str 或任何内置方法。顺便说一句,readlines 不会返回任何 str
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2017-07-17
相关资源
最近更新 更多