Python 读/写文件问题
我一直试图将一个长文本从一个文件复制到另一个文件,但它总是只复制了其中的一小部分。这看起来像是一个极限问题,我可以解决 如果有人能帮助我或解释我的错误,我会很高兴Python 读/写文件问题,python,file,Python,File,我一直试图将一个长文本从一个文件复制到另一个文件,但它总是只复制了其中的一小部分。这看起来像是一个极限问题,我可以解决 如果有人能帮助我或解释我的错误,我会很高兴 def runMenu(): print "\nMENU" print " 1) Copiar" print " 0) Exit" response = int( raw_input().strip() ) if response == 1: print "Copiar" try:
def runMenu():
print "\nMENU"
print " 1) Copiar"
print " 0) Exit"
response = int( raw_input().strip() )
if response == 1:
print "Copiar"
try:
archivo=open("D:\Boot.txt","r")
print "Name of the file: ", archivo.name
print "Closed or not : ", archivo.closed
print "Opening mode : ", archivo.mode
print "--------ORIGEN-----------"
print archivo.read()
print "-------------------------"
archivo.seek(0, 0)
archivo2=open("D:\Copia.txt","w+")
print "Name of the file: ", archivo2.name
print "Closed or not : ", archivo2.closed
print "Opening mode : ", archivo2.mode
archivo2.write(archivo.read())
archivo2.seek(0, 0)
print "---------DESTINO---------"
print archivo2.read()
print "-------------------------"
archivo.close()
archivo2.close()
except IOError:
print ("I/O Error de Lectura")
else:
print "Lectura OK"
elif response == 0:
#device.close()
print "Exit"
return response
def main():
print "main"
while(1):
if runMenu() == 0: break
main()
也许您必须调用读/写函数(archivo2.write(archivo.read()) )不止一次。 尝试将其放入循环中并复制文件数据,直到“Eof”(文件结束)。 使用循环,类似这样:
while not Eof(archivo) do
...
使用shutil.copy()
shutil.副本(src、dst)
将文件src复制到文件或目录dst。如果dst是一个目录,则在指定的目录中创建(或覆盖)一个与src具有相同基名的文件。权限位被复制。src和dst是以字符串形式给出的路径名
-Sunjay03您的文件是二进制文件而不是文本吗?它可以解释为什么只复制文件的一部分。在任何情况下,我建议使用前面提到的方法进行复制。当您在以文本模式打开的文件上使用
fseek()
或ftell()
时,Windows(至少在XP之前,包括XP,不确定Vista和7)可能会做一些奇怪的事情。由于Python函数seek()
和tell()
只是围绕这些函数相对较薄的包装,这也适用于它们
我发现在Windows中进行文件I/O时,最好的方法是以二进制模式打开所有文件。因此,您将执行open('somefile.txt','r')
,而不是open('somefile.txt','rb')
和open('someother_file.txt','w+b')
在二进制模式下打开文件并没有真正的缺点,但解决了这种奇怪的问题。这四行很有趣
archivo2.write(archivo.read())
archivo2.seek(0,0)
print archivo2.read()
archivo2.close()
通过
file.flush()
,您可以告诉python您希望将文件缓冲区中的所有内容写入磁盘。在第1行和第2行之间添加archivo2.flush()
时会发生什么情况?确定吗?在中,它说“如果大小参数为负数或省略,请读取所有数据,直到达到EOF。”-虽然我自己没有测试过,所以您可能完全正确,在这种情况下,请忽略我的注释:)尽管这不是对您问题的直接回答,如果您只想将文件复制到新位置而不修改任何内容,你看过方法吗?他们应该为你做所有的工作。你从中复制的文件的大小这绝对是“真实”代码的方式,但从OP的程序来看,他似乎在尝试示例代码。