如何在python中复制文本文件

时间:2015-03-06 02:48:31

标签: python file text clone

这就是我想要做的事情:

import copy
def printtext(swefile):
    for row in swefile:
        print(row)
text = open("wordsv.txt","r",encoding="utf-8")
text2 = copy.copy(text)
printtext(text)
print(text2.readlines())

但是不可能,TypeError:无法序列化'_io.TextIOWrapper'对象。 所以我想知道是否有一种很好的“克隆”文本变量的方法,这样我就可以再次打印所有的行。我知道我可以再次阅读该文件,但是这个答案并没有解决我遇到的更大问题,所以任何有关如何完成这项工作的建议都是有帮助的。


这是更大的背景,因为我无法用你的建议解决我的问题:

with open(textfilename, "r", encoding = "utf-8") as swefile:
    for row in swefile:
        word = row.strip()
        tempfile = copy.copy(swefile)
        l = getFurthest(word,tempfile)

我想在这里发生的事情是,我想发送尚未被读取的swefile部分(即通过for循环迭代)到getFurthest()!我无法发送swefile,因为这将使整个事情被读取,因此for循环中的迭代将停止,对吧?那么如何才能将已经读取的文本文件的一部分发送到getFurthest(),同时仍然可以在其余部分之后迭代?

3 个答案:

答案 0 :(得分:6)

如果您尝试避免重新打开文件,但想要阅读两次,则可以使用seek()

import copy
def printtext(swefile):
    for row in swefile:
        print(row)
text = open("wordsv.txt","r",encoding='utf-8')
printtext(text)
text.seek(0)
printtext(text)

如果您只关心文字,可以这样做:

import copy
def printtext(swefile):
    for row in swefile:
        print(row)
text = open("wordsv.txt","r",encoding='utf-8').readlines()
text2 = copy.copy(text)
printtext(text)
printtext(text2)

此处textwordsv.txt中的行列表,然后您将列表复制到text2(即更改text不会更改text2)。

答案 1 :(得分:2)

或者,如果您确实想要出于某种原因想要使用两个文件,最好使用shutil.copy来复制它:

import shutil

path = "wordsv.txt"
path2= "wordsv2.txt"
shutil.copy(path, path2)
with open(path, encoding='utf-8') as text, open(path2, encoding='utf=8') as text2:
    # Do something with text, text2 here

答案 2 :(得分:1)

您的第text2 = copy.copy(text)行不起作用,因为文字只是一个文件对象。要复制"文件中的文字,如下:

text2 = text.read()

请注意,您不会复制实际文本(内容),因为字符串是不可变的。