这就是我想要做的事情:
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()
,同时仍然可以在其余部分之后迭代?
答案 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)
此处text
是wordsv.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()
请注意,您不会复制实际文本(内容),因为字符串是不可变的。