【问题标题】:Unable to import numpy array properly from a text file无法从文本文件中正确导入 numpy 数组
【发布时间】:2018-11-30 20:31:28
【问题描述】:

我想将字符串数据类型转换为二维的numpy数组。

我正在从包含以下内容的目录中导入 .txt 文件:

[[18,1,2018,12,15],
[07,1,2018,12,15],
[03,1,2018,12,15]]

代码是:

import numpy as np

f = open("/home/pi/timer_database.txt","r")
read = f.read()


x = np.array(list(read))
print(x.size)
print(type(x))
print(x.ndim) 

输出是:

47
type <numpy.ndarray>
1

请帮助我解决这个问题。

【问题讨论】:

  • 您正在生成正在读取的文本文件吗?
  • 用于共享表格数据的最常见的 txt 文件格式是 csv - 仅使用逗号等分隔符分隔值。方括号不添加信息,只会使解析复杂化。

标签: python-2.7 numpy file-handling


【解决方案1】:

您可以使用ast 来评估您的字符串,这比解析整个内容要容易得多:

import ast
x=np.array(ast.literal_eval(read))

或者干脆eval:

x=np.array(eval(read))

但这会因为你有前导零而引发错误,所以首先简单地删除它们:

import re
read=re.sub(r'\b0','',read)

此外,如果您正在编写文件,建议使用其他方法,首先我建议简单地使用pickle

【讨论】:

  • 它显示语法错误:回溯(最近一次调用):文件“/home/pi/ac_auto_p1.py”,第 14 行,在 x = np.array(ast.literal_eval(读取))文件“/usr/lib/python2.7/ast.py”,第 49 行,在 literal_eval node_or_string = parse(node_or_string, mode='eval') 文件“/usr/lib/python2.7/ast.py “,第 37 行,解析中返回编译(源,文件名,模式,PyCF_ONLY_AST)文件“”,第 2 行 07,1,2018,12,15 ^ SyntaxError: invalid syntax
  • @MagicOak 您是否阅读了整个答案?请这样做,我已经说过,由于您的格式以及如何修复它,您会收到此错误。
【解决方案2】:

使用此代码

import numpy as np
f = open("/home/pi/timer_database.txt","r")
read = f.read()
read = read.replace("[" , "")
read = read.replace("]" , "")
read = read.replace(",\n" , "\n")
f= open("New_Array.txt","w+")
f.write(read)
f.close()
Array = np.loadtxt("New_Array.txt" , delimiter=',')
print(Array)

【讨论】:

  • 处理文件时,请始终使用with,这样您就不会忘记像在此处所做的那样关闭文件。另外你不需要生成垃圾文件,你可以使用byteIO然后将字符串提供给loadtxt
  • @JaiJanyani 感谢您的帮助,尽管该文件不是原始文件的副本。我得到的输出是 ======================= RESTART: /home/pi/ac_auto_p1.py =========== =========== [[ 1.80000000e+01 1.00000000e+00 2.01800000e+03 1.20000000e+01 1.50000000e+01] [ 7.00000000e+00 1.0000000000000+ 2300000000+ 2300000000+1.0120 01 1.50000000e+01] [ 3.00000000e+00 1.00000000e+00 2.01800000e+03 1.20000000e+01 1.50000000e+01]]
猜你喜欢
  • 2018-01-26
  • 2013-12-10
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多