[英]Read/Write files problem
我一直在尝试将一个较长的文本从一个文件复制到另一个文件,但它始终只复制了我的一小部分。 它看起来像一个极限问题,我可以解决。
如果有人可以帮助我或解释哪个是我的错误,我将非常高兴。
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()
使用shutil.copy()
http://docs.python.org/library/shutil.html#shutil.copy
shutil.copy(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', 'rb')
和open('some_other_file.txt','w+b')
而不是open('somefile.txt', 'r')
open('some_other_file.txt','w+b')
。
以二进制模式打开文件没有真正的缺点,但是可以解决这种怪异问题。
这四行很有趣...
archivo2.write(archivo.read())
archivo2.seek(0, 0)
print archivo2.read()
archivo2.close()
在第1行,您将一些数据泵出到文件中; 在此过程中,操作系统将有帮助地进行一些缓冲以使过程更高效。 最后,一些数据已写入磁盘,但其中一些仍在缓冲区中徘徊,等待缓冲区填满。
在第2行,将文件重新放置在文件的开头,在第3行,读取直到文件的末尾 。 您实际上从未做过任何会导致将缓冲区写入磁盘的操作。
在第4行,关闭文件,但是缓冲区无效。
您可以使用file.flush()
告诉python您希望将文件缓冲区中的所有内容写入磁盘。 在第1行和第2行之间添加archivo2.flush()
会发生什么?
也许您必须多次调用读/写函数(archivo2.write(archivo.read()))。 尝试使其循环,然后将文件数据复制到“ Eof”(文件末尾)。 使用循环,如下所示:
while not Eof(archivo) do
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.