为什么'for line in file'没有复制文本文件中的所有行?

时间:2015-07-03 16:03:12

标签: python-3.x for-loop text-files

我写了一些代码来从大文本文件中提取某些行,并注意到一些奇怪的东西丢失,所以我运行以下代码以确保for循环实际上是在文件中的每一行:

xf=open("bigFile.txt", r)
xxf=open("newFile.txt",w)
for line in xf:
  xxf.write(line)

由于某种原因,最终不会复制所有行。谁能告诉我我不理解或做错了什么?它最终只能制作一个大约60-70%的文件?任何见解将不胜感激。

编辑:感谢输入skrrgwasme& Shreevardhan。为了澄清,我的最终目标不仅仅是复制文件,在我的工作代码中我​​在编写行之前放了一些比较运算符,例如:

for line in xf:
 firstChar=line[:1]
 if firstChar==1:
   xxf.write(line)

这就是我使用“for line in file”的原因。我应该以其他方式这样做吗?

2 个答案:

答案 0 :(得分:0)

您需要关闭文件。在脚本退出之前,无法保证您正在写入的缓冲区被刷新到磁盘。您可以使用上下文管理器轻松完成此操作:

return Observable.zip(
            getRosterEntry(userXmppAddress).flatMap(rosterEntry -> getRosterPresence(rosterEntry.getUser()))
            ,
            getRosterEntry(userXmppAddress)
            , new Func2<Presence, RosterEntry, Friend>() {
                @Override
                public Friend call(Presence presence, RosterEntry rosterEntry) {
                    String finalUserXmppAddress = AppXmppUtils.parseXmppAddress(rosterEntry.getUser());
                    return new Friend(rosterEntry.getName(), finalUserXmppAddress, presence);
                }
            }).flatMap(Observable::just);

在您当前的代码中,您将编写with open("bigFile.txt") as xf, open("newFile.txt", "w") as xxf: for line in xf: xxf.write(line) xf.close(),但使用这样的上下文管理器将为您处理它,甚至在发生异常时关闭文件。

此外,如果您只是复制文件,也可以使用shutil.copyfile()

答案 1 :(得分:0)

要复制文件,最好使用shutil模块中的函数,例如copyfile()copy()copy2()

例如

from shutil import copyfile, copy2
copyfile('bigFile.txt', 'newFile.txt')

copy2('bigFile.txt', 'newFile.txt')