我写了一些代码来从大文本文件中提取某些行,并注意到一些奇怪的东西丢失,所以我运行以下代码以确保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”的原因。我应该以其他方式这样做吗?
答案 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')