python中txt文件的读写,python读取txt某一行数据

  python中txt文件的读写,python读取txt某一行数据

  这项工作涉及内容捕获的需求。使用Python根据Url抓取相应的Html页面,并存储在本地文件中。然后在程序中把本地文件的路径作为参数,调用Node过滤杂质,提取内容。但奇怪的是,Python执行过程中,写操作已经完成,而Node读取文件时,却什么都得不到!这让我很尴尬。

  重现场景

  伪代码如下

  #文件名:spider.py

  # html路径写html_file_path=xxx.html

  #请求抓取响应=requests.get(url)

  内容=响应.内容

  # Write file HTML _ handler=open(HTML _ file _ path, W )

  Html_handler.write(content) #注意,写操作在这里完成

  #调用Node进行内容过滤,Node会读取刚刚写好的Html文件shell= Node filter . js-input Html _ file _ path。

  #执行shell命令流程=子流程。波普(贝壳)

  process.communicate()

  下面是如何在filter.js中读取输入文件:

  filename=xxx.html

  var source content=fs . read file sync(文件名,{

  编码:“utf8”

  });

  console . log(source content);

  .

  开始执行。

  python spider.py

  #但是什么都没有打印出来。

  执行时发现xxx.html文件已经创建,但读取时Node始终为空,手动打开xxx.html也是空文件!

  初步推测

  文件编码问题,节点按照utf-8读取文件,但是文件不是用u8写的。

  磁盘已满,文件写入失败。

  验证猜想

  最好验证的是2,df -h可以看到磁盘空间,但是没有满。

  编码问题,嗯,常问的问题之一,开始追溯。

  破了程序写完,打开文件查看代码,是u8,没有问题!

  然后继续怀疑是不是Node读的时候出错了?

  写一个u8文件供Node读取,可以正常读取!

  奇怪,py生成u8,Node按照u8读取。为什么是失败?

  中间有个有趣的事情,就是先把原程序写入xxx.html,然后执行shell让Node读取。后来我提前手写了这个xxx.html文件,然后用python注释掉了用html_handler.write(content)写文件的过程,然后继续用shell调用Node,读取成功了!

  所以,文档写作流程一定有问题!脚本运行过程中,Python写操作失败,节点读操作失败!

  发现和解决问题

  不经意间,我发现write部分的代码好像有点别扭。是不是少了一个句号()。

  嗯,找bug太随机了…

  然后在python的write步骤之后添加以下代码

  #关闭文件句柄html_handler.close()

  嗯,世界就完整了!一切正常!

  问题总结

  Python的写方法是AIO[异步输入/输出]类型,即异步输入/输出,类似于MySQL的登陆机制。当一个文件用write方法写到系统盘时,首先写到自己的cache [memory]中,然后在cache满了的时候异步写到磁盘上进行登陆,否则永远不会写到真正的磁盘文件中。

  当然,有两种情况会改变上述异步写入的行为:

  手动在文件句柄上执行close()操作,这样解释器会立即将缓存刷新到文件并立即写入。

  当程序终止时,比如exit(),解释器会自动清理内存,最后降落缓冲区,文件就被写入了。

  这也非常类似于PHP的垃圾收集机制。默认情况下,当垃圾转储[根缓存]已满时,变量将被自动清除,或者您可以手动执行gc_collect_cycles()函数来释放垃圾变量,并强制立即收集内存。

  回顾

  回过头来看,我之所以在write时开始使用exit方法来中断这个点,是因为即使没有关闭文件,似乎也命中了case 2。

  后来,close方法被添加到hit场景1中,因此两种情况下的文件都被写入。

  嗯,我大部分时间都在找bug,结果就是因为简单的关闭函数,_

  如果你觉得这篇文章有用,请点击页面上的广告。生活不易,非常感谢!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: