当前位置: 首页 > 面试题库 >

每次打开/关闭Python文件与保持打开状态直到完成该过程

邬阳
2023-03-14
问题内容

我有大约50 GB的文本文件,正在检查每行的前几个字符,并将这些字符写入为该开始文本指定的其他文件中。

例如。我的输入包含:

cow_ilovecow
dog_whreismydog
cat_thatcatshouldgotoreddit
dog_gotitfromshelter
...............

因此,我想按牛,狗和猫(约200种)分类处理它们,所以,

if writeflag==1:
    writefile1=open(writefile,"a") #writefile is somedir/dog.txt....
    writefile1.write(remline+"\n")
    #writefile1.close()

那么,什么是最好的方法,我应该关闭吗?否则,如果我保持打开状态,是否writefile1=open(writefile,"a")在做正确的事情?


问题答案:

您绝对应该尽量少打开/关闭文件

因为即使与文件读写相比,文件打开/关闭也要昂贵得多

考虑两个代码块:

f=open('test1.txt', 'w')
for i in range(1000):
    f.write('\n')
f.close()

for i in range(1000):
    f=open('test2.txt', 'a')
    f.write('\n')
    f.close()

第一个花费 0.025 秒,第二个花费 0.309秒



 类似资料:
  • 问题内容: 我已经提交了类似的问题,但已将问题分解为最简单的形式,因此我将其再次发布: 问题是,如果我多次添加同一文件,SolrJ似乎会使文件句柄保持打开状态。 我使用以下方法向Solr提交文档: 而这种删除文件的方法: 但这似乎留有一些文件句柄: 以下代码段演示了该问题: 如果我两次添加相同的文档,SolrJ会以某种方式使这些句柄保持活动状态,并且添加的文档无法被任何其他进程修改。 我已经尝试调

  • 我正在创建一个URLClassloader来加载一些JAR。每个jar从不同的classloader中正确加载,每个jar包含一个具有run()方法的类。现在这个run()的主体可以在其中创建一个匿名的内部类。但是,因为我在try-with-resources块中创建了我的URLClassloader,所以它会自动关闭,并且在运行时,当它试图加载匿名内部类时,它会抛出一个NoClassDefFou

  • 问题内容: 我有一个bukkit插件(minecraft),需要连接到数据库。 数据库连接应该一直保持打开状态,还是在需要时打开和关闭? 问题答案: 数据库连接仅在需要时才打开,并在完成所有必要的工作后关闭。代码示例: 在Java 7之前: try { con = … //retrieve the database connection //do your work… } catch (SQLEx

  • 我有一个bukkit插件(minecraft),需要连接到数据库。 数据库连接应该一直保持打开状态,还是在需要时打开和关闭?

  • 打开 M600 长按侧边电源按钮直至屏幕上出现 Polar 标志。 关闭 M600 导航至 Settings(设定)应用程式,滚动菜单找到并轻触 System(系统)。 轻触关机。 通过轻触核取标记图标确认关闭电源。

  • 问题内容: 当前,我尝试创建一个打开文件(带有相应应用程序)的单元测试,然后测试运行应等待程序关闭。 有谁知道如何实现(尽可能简单)我的计划? 问题答案: 从文档: 一旦关联的应用程序启动,startfile()就会返回。没有选择等待应用程序关闭的选项,也没有办法检索应用程序的退出状态。 如果您知道用于打开文件的应用程序的路径,则可以使用subprocess.Popen()来等待。 请参阅:htt

  • 在打开和关闭其他ejb连接时保持和ejb连接打开是常见的还是可以接受的,还是应该在客户端完成连接并为后续任务打开新连接后立即关闭连接? 我目前正在开发一个使用EJB(JBoss AS7.1.1.final)的Swing应用程序。该应用程序打开一个ejb连接(即创建一个SynalContext实例),然后在应用程序保持运行的情况下将该SynalContext用于常见任务。有许多长时间运行的操作,其中

  • 问题内容: 这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下: 但是在运行上述代码时,记录并不总是被删除(精确地:id = 1永远不会被删除,而其他id总是被删除)。我读到保持打开的会话可以稍微加快应用程序的速度- 这就是为什么我要共享会话对象。我的业务对象通过DI获取会话工厂: 问题答案: 根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事