1

首先,我是一个很弱的程序员,对 python 和这个站点不熟悉。对不起我的错误。所以在这里,我的数据文件如下所示:

http://pastebin.com/60E84azv

粘贴 bin 文件共有 6221 行。为了测试,我将行号限制为最大 1000。

我正在尝试读取数字行中的浮点值,主要列是 1 和 2。

到目前为止,我已经编写了这段代码来从文件中提取我想要的行:

f = open('Sample Data.txt',"r")

num=0
line = f.readlines()

for n in range (107, 1000, 1):  #6621

    if (n>108):
    print line[n]

效果很好,将每行中的数字打印为字符串。(每个数字都有 4 个空格与下一个数字分开,除了每列中的第一个数字有 2 个空格。)

我现在希望将字符串转换为数组或列表,以便我可以使用各个数字并最终绘制一个带有 y 轴上第 2 列的图形。我编写了以下内容来拆分字符串并将其转换为浮点数:

for i in range(108,1000,1):
line[i].split('    ')
float(line[i]) = X[i]
print(X[i])

当我运行它时,它会返回以下错误:

Traceback (most recent call last):
  File "<pyshell#25>", line 2, in <module>
print(X[i])
NameError: name 'X' is not defined

我已经把它分解了, line[i].split(' ') 似乎有点工作,因为当我测试打印该行时,它给出了 3 个单独的字符串,如下所示:

['  5070.74537037   -0.003382', '0.009507\n']

我不知道为什么会出现这个错误。我认为 X[i] 是我应该用浮点数创建的新数组,但由于某种原因它似乎不想工作。我在某处读到,在使用大型数据集时,最好使用多维数组......如果我什至无法理解一维,我就没有机会使用其他的!

有什么方法可以创建一个数组或两个一维数组,这将允许我独立操作潜在图的 x 或 y 列?

感谢您的时间!

4

3 回答 3

1

这可以更优雅地处理split,每行不带任何参数:

f = open('Sample Data.txt',"r")
num = 0
for line_number, line in enumerate(f):
    if (line_number < 109):
        #jump over lines at the beginning
        continue
    # now split the line everywhere there are one or more whitespaces:
    numbers_as_strings = line.split()
    # and convert the numbers to floats
    numbers = list(map(float, numbers_as_strings))
于 2013-11-02T17:31:00.527 回答
0

您收到该错误的原因是您需要在 for 循环之前将 X 声明为列表:

X = list()
for i in range(108,1000,1):
   line[i].split('    ')
   float(line[i]) = X[i]
   print(X[i])

我认为这将提供您想要的输出:

f = open('Sample Data.txt',"r")
num=0
line = f.readlines()

    X = []
    for n, lines in enumerate(line, 0):  #6621
        # make it 109 to remove the first line "['# Column 3: Magnitude error\n']"
        if (n > 109): 
            linSplit = lines.split('    ')
            joined = ' '.join(linSplit)
            # apply the float function to every item in joined.split
            # create a new list of floats in tmp variable
            tmp = map((lambda x: float(x)), joined.split())
            X.append(tmp)


    print X[0] # print first element in the list

输出:
[5061.58148148, 0.079304, 0.011018]

于 2013-10-31T21:28:58.700 回答
0

您没有在 for 循环中调用 x 之前声明它,如果您在 for 循环中声明它,它将使用每个循环传递的初始值重新启动。试试这个。

x = []
for i in range(108,1000,1):
line[i].split(' ')
x.append(float(line[i]))
print(x[i])

于 2013-10-31T21:36:24.450 回答