.xyz文件_Rust学习实验笔记:读取xyz文件

最近由于要优化一些Python的脚本,开始接触Rust这块的资料。官网提供了一个比较好文档,只是目前中文化的资料还比较少。基于搜索编程似乎麻烦一点。先根据实际情况在官网文档看了一些说明。先把接触的问题记录下来,以留为后面使用。

python读取xyz文件比较容易,所需要的代码并不多。转换Rust似乎也遇到一些Api上和语法的困扰。下面看看如何读取xyz文件。xyz的文件如下,描述一个分子的三维坐标。下面通过Rust方式将其提取出来

10C       -7.882          1.429           -4.724          C       -7.788          0.036           -5.039          H       -7.016          -0.607          -4.626          C       -8.811          -0.592          -5.798          H       -8.733          -1.641          -6.068          C       -9.882          0.194           -6.282          C       -9.86           1.556           -6.042          H       -10.671         2.123           -6.491          C       -8.973          2.203           -5.244          H       -9.079          3.268           -5.059          

看一下Rust的这块编程如下写。在书写过程,其实花费很长时间找资料,光写起来,主要不熟悉,编译过程也遇到一些小问题。其次语法体验也是要消化比较慢。

下面关于采取读取文件和操作字符串两个做法。

裁剪字符串使用两个方法 一个是 split 另外一个是split_whitespace,前者可以根据标记来分拆,这种方式也很常见。后者采取去除了空格去分割,后者刚好适合我们提取xyz的原子坐标信息,同时也可以判断是否原子信息还是数量。

在实验过程,遇到一个类型判断问题,这个查询资料没有具体去解决如何去解决将一个数字字符串判断为整形类型。采取了split_whitespace方法去处理短期避开了Rust类型判断的事情,满足了提取xyz坐标的问题。因此,暂时采取了这样方法去提取坐标。

use std::fs;use std::time::{Instant};fn main() {   readxyz();}fn readxyz(){  let start = Instant::now();  let s = fs::read_to_string("0001_ligand_raw_ring_1.xyz").unwrap();  //将原子的和坐标控制抽离出来  let  result: Vec = s.split("\n").collect();  let  mut atomlist: Vec<Vec> = Vec::new();  for line in  result.iter(){       if line == &"" || line == &"\r"{         println!("内容{:?}",line);         continue;       }       let  cur_line: Vec = line.split_whitespace().collect();       if cur_line.len() > 1 {        atomlist.push(cur_line);      }   }   let duration = start.elapsed();   println!("循环的耗时: {:?}", duration);   println!("内容{:?}",atomlist);   }

cargo run 输出内容

8fc453417fae79b8b9d7120df940d47c.png

Rust提取这样一个小小文件,时间上也很快,在做这个实验的过程,书写过程会对本人产生很多语法上干扰,所以写起来并不是很流畅去解决这个解析文件过程。大数量批量的情况,如果将mol2文件批量转换xyz文件会相对也会得到时间上的一定提升。不过呢,实际上python openbabel足够满足使用了,不差那么一点时间的话。只是在Rust使用这块上,还是可以继续挖掘一些实用的信息。我想在今后这块会找到很多实用的点。虽然门槛高,也意味对使用者的要求也有一定提升空间。

但是在选型这块,c,c++ ,python 结合资料比较多。Rust在资料搜索上还需要积累一些平民化的案例和资料。

1e61ee6ba421e49806d6adbccffaa132.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值