python – 如何只读取文本文件中的特定行?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何只读取文本文件中的特定行?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2005字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何只读取文本文件中的特定行?](/upload/InfoBanner/zyjiaocheng/795/689c9f910dfb4b0796e3e7df9dba3366.jpg)
参见英文答案 > load a certain number of rows from csv with numpy 3个
我正在尝试处理存储在文本文件中的数据,该文件看起来像这个test.dat:
-1411.85 2.6888 -2.09945 -0.495947 0.835799 0.215353 0.695579
-1411.72 2.82683 -0.135555 0.928033 -0.196493 -0.183131 -0.865999
-1412.53 0.379297 -1.00048 -0.654541 -0.0906588 0.401206 0.44239
-1409.59 -0.0794765 -2.68794 -0.84847 0.931357 -0.31156 0.552622
-1401.63 -0.0235102 -1.05206 0.065747 -0.106863 -0.177157 -0.549252
....
....
然而,该文件是几GB,我非常希望在小块的行中读取它.我想使用numpy的loadtxt函数,因为这会将所有内容快速转换为numpy数组.但是,到目前为止,我还无法管理该函数似乎只提供了像这里的列选择:
data = np.loadtxt("test.dat", delimiter=' ', skiprows=1, usecols=range(1,7))
任何想法如何实现这一目标?如果使用loadtxt不可能在Python中提供任何其他选项?
解决方法:
如果你可以使用pandas,那会更容易:
In [2]: import pandas as pd
In [3]: df = pd.read_table('test.dat', delimiter=' ', skiprows=1, usecols=range(1,7), nrows=3, header=None)
In [4]: df.values
Out[4]:
array([[ 2.82683 , -0.135555 , 0.928033 , -0.196493 , -0.183131 ,
-0.865999 ],
[ 0.379297 , -1.00048 , -0.654541 , -0.0906588, 0.401206 ,
0.44239 ],
[-0.0794765, -2.68794 , -0.84847 , 0.931357 , -0.31156 ,
0.552622 ]])
编辑
如果你想读每行k行,你可以指定chunksize.例如,
reader = pd.read_table('test.dat', delimiter=' ', usecols=range(1,7), header=None, chunksize=2)
for chunk in reader:
print(chunk.values)
日期:
[[ 2.6888 -2.09945 -0.495947 0.835799 0.215353 0.695579]
[ 2.82683 -0.135555 0.928033 -0.196493 -0.183131 -0.865999]]
[[ 0.379297 -1.00048 -0.654541 -0.0906588 0.401206 0.44239 ]
[-0.0794765 -2.68794 -0.84847 0.931357 -0.31156 0.552622 ]]
[[-0.0235102 -1.05206 0.065747 -0.106863 -0.177157 -0.549252 ]]
您必须按照自己的意愿处理如何将它们存储在for循环中.请注意,在这种情况下,reader是TextFileReader,而不是DataFrame,因此您可以懒惰地遍历它.
您可以阅读this了解更多详情.
内容总结
以上是互联网集市为您收集整理的python – 如何只读取文本文件中的特定行?全部内容,希望文章能够帮你解决python – 如何只读取文本文件中的特定行?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。