【问题标题】:Numpy genfromtxt skipping leading whitespace in each lineNumpy genfromtxt 在每行中跳过前导空格
【发布时间】:2019-01-01 08:53:54
【问题描述】:
import numpy as np

stuff ='       57107 1 1589 1 2201-1 1 1 1-1 111-1-1-1   3991555 1 2 1 1 695 0A65 -1 1 1 1 2-1-1 24546-1-1  -1 -1-1-1-1-1-1 2 1-155- 1 2 1 2 6 240 1 8 9 1 1-1 1 1 1 2 1 2 57 57 57 1 0 0 2 1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 2-170-1-1 70-1-1-1-1 2-1 14080-1 80-1  697 2 5 5-1 2 3 5 2-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 1-122 1 1 1 6-1-1-1 -1 1-1 1 2-1-1-1-1-1-1-1 6 4840678-1-1 -1 -1 2-1-1-1 2 4-1-1 6-143-135-1 117-1 9-1 3 1 1 1-1-1-1-1-1-1  -1  -1  -1  0-1-1      0-1-1-1      -1      0-1-1-1-1-1-1-1-1-1-1-1-1-1   3991555         0         0   3642944   3958306-1    -1-1 0 0 0 1 0-1 050 0 0 0 011 0 0 0-1-1-1-1 0 0-1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 0 0 0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1\n       57107 1 1589 1 2201-1 1 1 1-1 111-1-1-1   3991555 1 2 1 1 695 0A65 -1 1 1 1 2-1-1 24546-1-1  -1 -1-1-1-1-1-1 2 3-154- 1 1 2 2 6 239 1 8 9 1 2-1 1 2 1 2 1 2 57 57 57 1 0 0 1 1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 1 22420-1 44-1-1-1-1 2-1 2-12420 44-1   -1 1 5 5-1 1 3 5 2-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 1-119 1 1 1 2-1-1-1 -1 1-1 1 2-1-1-1-1-1-1-1 4 2630265-1-1 -1 -1 2-1-1-1 2 4-1 1 6-134-119-1 110-1 4-1 1 1 1 2-1-1-1-1-1-1  -1  -1  -1  0-1-1      0-1-1-1      -1      0-1-1-1-1-1-1-1-1-1-1-1-1-1   3991555         0         0   3991555   3998325-1    -1-1 0 0 0 1 0-1 050 0 0 0 011 0 0 0-1-1-1-1 0 0-1 1 1 0 0 0 0 1 0 1 1 1 0 0 0 1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 0 0 0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1\n       57108 1  912 1 1201-1 2 1 1-1 1 2-1-1-1   4478084 1 1 6 1 695 0A65 -1 1 2-1-1-1-1 24546-1-1  -1 -1-1-1-1-1-1 2 2-122- 6-1 1 2 6 240 1 8 9 0 1-1 0 0 2 2 7 2 57 57 57 1 0 0 1 1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 2-140-1-1 40-1-1-111 125 2-115-1 15-1  321 2 5 5-1 2 3 3 2-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 1-114 1 1 1 4-1 011 -1 1-1 1 4-1-1-1-1-1-1-1 2 4850889-1-1 -1 -1 2-1-1-1 2 2-1 2 8-144-142-1 118-112-1 3-1 1 1-1-1-1-1-1-1  -1  -1  -1  0-1-1      0-1-1-1      -1      0-1-1-1-1-1-1-1-1-1 1 2 2 2   4478084         0         0   4478084   4609610-1    -1-1 0 0 0 1 0-1 050 0 0 0 011 0 0 0-1-1-1-1 0 0-1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 0 0 0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 0 0 0'
filename = 'test.dat'
writer = open(filename, mode='w')
writer.write(stuff)
writer.close()

data = np.genfromtxt(filename,delimiter = ',', dtype=None, encoding='utf-8')

运行上面的代码会返回每行文本的 3 行,但是它会跳过每行开头的空格。如何包含它?

变量具有不同的位置和长度(例如,变量 A 位于位置 32,长度为 2,变量 B 位于位置 68,长度为 1),因此包含空格很重要,这样我才能正确解析字符串.

我还坚持使用 numpy genfromtxt,因为我使用的文件有时包含空字符(我尝试使用 pd.read_csv(filename, dtype=None, encoding='utf-8'))。使用 read_csv 时,pandas 会将空字符视为行尾终止符,因此我会丢失空字符之后的所有文本。

【问题讨论】:

  • NumPy 的genfromtext 函数返回一个包含数字的numpy.ndarray 对象。为什么要在 numpy.ndarray 对象中使用空格?此外,空字符代表一行的结尾,那么为什么在文本中的空字符之后会有任何内容呢?您使用了哪些特定的空字符,在哪里使用?
  • 我正在使用的文件就是这样 - 我无法控制它。为每个变量给出的位置/长度考虑了空格,所以我需要将整行作为一个字符串,这样我就可以通过这些位置/长度来解析它。

标签: python pandas numpy text whitespace


【解决方案1】:

使用 numpy loadtxt 而不是 genfromtxt 解决了这个问题。

编辑:根据@hpaulj 的建议,使用 filename.readlines() 会更适合我正在尝试做的事情。

【讨论】:

  • 如果您满足于将每一行读取为字符串('U814' dtype),为什么不直接使用file.readlines()?您将获得一个行列表,每一行都与您从loadtxt 获得的相同(\n 除外)。 genfromtxt/loadtxt 适用于要将列拆分为数组的列或字段的文件。在您的情况下,这意味着使用默认的空格分隔符。
  • 谢谢!我不知道我是如何完全忘记 readlines 的。我更喜欢那个。它还处理空字符。
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多