python - 除了换行符之外,如何从包含杂散回车符的文本文件中加载 numpy 数组?
问题描述
我有一个包含杂散回车的换行符分隔的数据文件,例如:
printf '1 1 string1
2 2 str\ring2
3 3 string3
' > mydat.dat
使用 Python 列表时,我可以使用以下方法正确处理此文件newline='\n'
:使用回车遍历文件
#!/usr/bin/env python3
xs = []
ys = []
labels = []
with open('mydat.dat', 'r', newline='\n') as f:
for line in f:
x, y, label = line.split(' ')
xs.append(int(x))
ys.append(int(y))
labels.append(label)
print(xs)
print(ys)
print(repr(labels))
打印所需的:
[1, 2, 3]
[1, 2, 3]
['string1\n', 'str\ring2\n', 'string3\n']
我的问题是,numpy.loatxt
或类似的便捷功能是否有能力以类似方式处理回车,而不会强迫我手动处理文件open
,或预处理文件dos2unix
?
如果我尝试:
#!/usr/bin/env python3
import numpy
x, y = numpy.loadtxt('mydat.dat', dtype=int, unpack=True, usecols=(0, 1,))
print(x)
print(y)
然后它失败了:
Traceback (most recent call last):
File "./main.py", line 5, in <module>
x, y = numpy.loadtxt('mydat.dat', unpack=True, usecols=(0, 1,))
File "/home/ciro/.local/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1141, in loadtxt
for x in read_data(_loadtxt_chunksize):
File "/home/ciro/.local/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1061, in read_data
vals = [vals[j] for j in usecols]
File "/home/ciro/.local/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1061, in <listcomp>
vals = [vals[j] for j in usecols]
IndexError: list index out of range
因为当它到达 时2 2 str\ring2
,它被视为ing2
具有单个条目的行。
在 Python 3.6.7、numpy 1.11.1、Ubuntu 18.04 中测试。
解决方案
loadtxt
您可以使用选项打开文件,而不是将文件名newline='\n'
提供给 numpy ,并将文件处理程序提供给 numpy
with open('mydat.dat', 'r', newline='\n') as f:
x, y = numpy.loadtxt(f, dtype=int, unpack=True, usecols=(0, 1,))
print(x)
print(y)
推荐阅读
- node.js - MERN Heroku 应用程序在生产中崩溃,只能在本地开发中运行
- web-scraping - Jsoup 解析 Youtube 页面
- c# - Unity Collider - Box Collider 和 Mesh Renderer 在碰撞后移动
- paypal - PayPal next_billing_time 总是返回 10:00:00Z
- arrays - 如何在数组 Golang 中找到不重复的项目
- javascript - 如何使用 JavaScript 将作为数组的字符串转换为数组
- terraform - 当 Terraform 模板中的元组为空时,如何获取默认值?
- excel - 停止宏以在导入的数据中添加标题(标题必须手动添加,因为每次都有不同的库号)
- mongodb - MongoDB findOneAndUpdate 嵌套对象
- json - 如何使用组合从 SwiftUI 中的 URL 解析单个 JSON 对象?