读/写文件问题

时间:2011-08-23 19:07:28

标签: python file

我一直在尝试将一个长文本从一个文件复制到另一个文件,但它总是复制我一小部分文件。它看起来像我可以解决的极限问题。

如果有人能帮助我或解释哪个是我的错误,我会很高兴。

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()

5 个答案:

答案 0 :(得分:2)

使用shutil.copy()

http://docs.python.org/library/shutil.html#shutil.copy

  

shutil.copy(src,dst)

     

将文件src复制到文件或目录dst。如果dst是目录,则在指定的目录中创建(或覆盖)与src具有相同基本名称的文件。权限位被复制。 src和dst是以字符串形式给出的路径名。

-Sunjay03

答案 1 :(得分:0)

您的文件是否有机会二进制而不是文本?它可以解释为什么只复制文件的一部分。无论如何,我建议使用已经提到的方法进行复制。

答案 2 :(得分:0)

当您在文本模式下打开的文件上使用fseek()ftell()时,Windows(至少包括XP,不确定Vista和7)可能会做一些奇怪的事情。由于Python函数seek()tell()只是围绕这些函数的相对较薄的包装器,因此这也适用于它们。

我发现在Windows中执行文件I / O时最好的办法就是以二进制模式打开所有文件。因此,您可以open('somefile.txt', 'r')open('somefile.txt', 'rb')代替open('some_other_file.txt','w+b')

以二进制模式打开文件没有真正的缺点,但解决了这样的怪异。

答案 3 :(得分:0)

这四行很有意思......

  1. archivo2.write(archivo.read())
  2. archivo2.seek(0, 0)
  3. print archivo2.read()
  4. archivo2.close()
  5. 在第1行,您将一些数据输出到文件中;在此过程中,操作系统有助于进行一些缓冲,以提高流程效率。最后,一些数据已写入磁盘,但其中一些数据仍在缓冲区中等待缓冲区填满。

    在第2行,您将文件重新定位在文件的前面,在第3行,您读取直到文件末尾。你实际上从未做过任何会导致缓冲区被写入磁盘的事情。

    在第4行,您关闭文件,但缓冲区无效。

    你可以告诉python你希望文件缓冲区中的所有内容都写入磁盘,file.flush()。在第1行和第2行之间添加archivo2.flush()会发生什么?

答案 4 :(得分:-1)

也许你必须调用读/写函数(archivo2.write(archivo.read()) )经常不止一次。 尝试将其置于循环中并将文件数据复制到“Eof”(文件末尾)。 使用循环,如下所示:

while not Eof(archivo) do
...