我正在使用shutil.copy将一个文件的内容复制到另一个文件。但是它导致我的orignal文件被删除,错误为“文件中没有数据”
我第一次尝试了这个
import shutil
shutil.copy('keywords.txt', 'keywordsfinal.txt')
然后被告知文件需要以可写格式打开
import shutil
ab = open("keywords.txt","w")
abc = open("keywordsfinal.txt","w")
shutil.copy('keywords.txt', 'keywordsfinal.txt')
ab.close()
abc.close()
但是对于这两个代码,即使我在每个.txt文件中都有某些内容,例如test1和test2,这两个文件都将返回空。
我之前有这个工作,大约6个月后回到我的程序中找到这个错误。任何帮助赞赏。
最近,下面的错误也开始显现,我不知道它是什么,以及它是否与我的代码有任何关联。
Traceback (most recent call last):
File "C:\Python33\lib\random.py", line 249, in choice
i = self._randbelow(len(seq))
File "C:\Python33\lib\random.py", line 225, in _randbelow
r = getrandbits(k) # 0 <= r < 2**k
ValueError: number of bits must be greater than zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\*******\Desktop\*******\*********Python\new\Final - Copy.py", line 84, in <module>
a = random.choice(list(f)).strip() #.strip cleans the line \n problem
File "C:\Python33\lib\random.py", line 251, in choice
raise IndexError('Cannot choose from an empty sequence')
IndexError: Cannot choose from an empty sequence
答案 0 :(得分:2)
您需要先关闭文件句柄,然后才能使用shutil。如果您在使用copy()之前没有关闭文件句柄,shutil将只创建目标文件但它将保持为空。
上面的代码应如下所示:
import shutil
ab = open("keywords.txt","w")
abc = open("keywordsfinal.txt","w")
ab.close()
abc.close()
shutil.copy('keywords.txt', 'keywordsfinal.txt')
答案 1 :(得分:1)
shutil.copy()
之前打开文件。list(f)
为空。答案 2 :(得分:1)
shutil.copy()
接受文件名(字符串)作为参数。它会为您打开文件。您可能会将其与接受文件对象的shutil.copyfileobj()
混淆。即使使用copyfileobj()
,也不应对要复制的文件使用"w"
模式(第一个参数,即源代码)。
"w"
模式(代表"write"
)表示"open for writing, truncating the file first"(使文件为空)。
#XXX REMOVE THIS CODE, IT DESTROYS THE FILES
ab = open("keywords.txt","w")
abc = open("keywordsfinal.txt","w")
注意:从代码中删除有问题的行不会还原文件。一旦它们空了;他们一直都是空的。你需要重新填充它们。它应该解决你的第二个问题:用空列表调用random.choice()
:
>>> import random
>>> random.choice([])
Traceback (most recent call last):
File "/usr/lib/python3.2/random.py", line 249, in choice
i = self._randbelow(len(seq))
File "/usr/lib/python3.2/random.py", line 225, in _randbelow
r = getrandbits(k) # 0 <= r < 2**k
ValueError: number of bits must be greater than zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/random.py", line 251, in choice
raise IndexError('Cannot choose from an empty sequence')
IndexError: Cannot choose from an empty sequence