【问题标题】:Parsing a data file into a 2d array将数据文件解析为二维数组
【发布时间】:2015-10-28 00:52:31
【问题描述】:

我正在用 Python 解析一个文件,所有文件看起来都像这样:

100
3
(5.0000, 0.0000, 3.5000, 501.0000)
(4.8831, 1.0749, 3.4416, 23.2251)
(4.5379, 2.0994, 3.2689, 12.6309)

其中第一个值是数据点的数量,第二个是某种类型的标志,其余的值是数据点。

到目前为止,我已经能够使用以下方法将所有文件数据解析到数组中:

lines = tuple(open(str(sys.argv[1]) , 'r')

但我的麻烦在于在我将数据放入该数组后解析数据。

我正在尝试创建一个仅包含前两行之后的数据的数组,前两行仅包含二维数组中的数字,而没有 (,) 和数字数据。

编辑:我应该提一下,数据不必是十进制数,也可以是 int。

【问题讨论】:

  • 您只想删除所有(,)
  • 基本上,是的,但我也想将数据添加到二维数组中,现在它作为一个完整的字符串位于一维数组中。
  • 好吧,看起来它们可以是普通的 Python 元组,也许将它们读为元组会比在这里使用正则表达式更好?

标签: python arrays file parsing


【解决方案1】:
skip = 2
with open('path/to/infile') as infile:
    for _ in range(skip):
        infile.readline()
    answer = [[float(num) for num in line.strip()[1:-1].split(',')] for line in infile]

【讨论】:

  • 如果数据中的数字不是浮点数,它会给我一个错误。数据可以是浮点数或整数,有没有办法让它考虑这两种可能性?
  • 应该可以很好地处理整数。我认为您面临的错误来自其他地方。如果你告诉我错误,我也许可以修复它
  • Traceback (most recent call last): File "cluster.py", line 31, in <module> answer = [[float(num) for num in line[:1-2].split(',')] for line in infile] ValueError: could not convert string to float: (1
【解决方案2】:

好的,所以你现在做的方式很混乱,一般不会起作用。

试试这样的:

filename = sys.argv[1] #no need to str(), it's already one
array = [] #initialize empty
with open(filename) as f: #automatically closes file
    next(f) #ignore first line
    flag = next(f) # get next line. maybe int() it?
    for line in f: #for remaining file:
        noparens = line[1:-2] #remove first and last character (and newline too)
        numbers = map(float, noparens.split(","))) #split and convert to float
        array.append(list(numbers)) #append array to outer array

【讨论】:

  • 好的,谢谢。我试试这个,看看效果如何,然后让你kow。
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多