繁体   English   中英

读/写文件问题

[英]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')

以二进制模式打开文件没有真正的缺点,但是可以解决这种怪异问题。

这四行很有趣...

  1. archivo2.write(archivo.read())
  2. archivo2.seek(0, 0)
  3. print archivo2.read()
  4. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM