如何将文本文件中的一维数据读入一维数组? [Python]

How do I read 1 dimensional data from a text file into a 1D array? [Python]

我有一个文本文件 DATALOG1.TXT,其值从 0 到 1023,与信号有关。该文件每行有一个值,所有值都存储在一列中。这是第一个值如何存储在文件中的示例:

0
0
576
0
643
60
0
1012
0
455
69
0
1023
0
258

我有以下代码,它只输出 0 到 9 之间的“幅度”值,就像标准化一样。这是我的代码:

import matplotlib.pyplot as plt
import numpy as np


values = [] #array to be filled

#reading data from the file into the array
f = open('DATALOG1.TXT', 'r')
for line in f:
    values.append(line[0])

#creating another array of the same size to plot against
time = np.arange(0, len(values), 1)

plt.bar(time, values, color='g', label='File Data')
plt.xlabel('Time', fontsize=12)
plt.ylabel('Magnitude', fontdsize=12)
plt.title('Magnitude changes', fontsize=20)
plt.show()

为什么输出介于 0 和 9 之间,而不是文本文件中显示的值(介于 0 和 1023 之间)?

你的问题出在这里:

for line in f:
    values.append(line[0])

您追加的是列表中每一行的第一个字符 values。列表 values 包含整行,包括行尾。如果你要使用

for line in f:
    values.append(line.strip())

你应该更接近你的最终答案了。

通过采用 line[0],您只需将每行的第一个字符附加到列表中。

因为你已经使用了numpy,你可以使用genfromtxt加载数据文件。

您的代码将变为:

import matplotlib.pyplot as plt
import numpy as np


values = [] #array to be filled

#reading data from the file into the array
values = np.genfromtxt('DATALOG1.TXT')


#creating another array of the same size to plot against
time = np.arange(0, len(values), 1)

plt.bar(time, values, color='g', label='File Data')
plt.xlabel('Time', fontsize=12)
plt.ylabel('Magnitude', fontsize=12)
plt.title('Magnitude changes', fontsize=20)
plt.show()

我建议阅读完整文件,拆分每个换行符的值 \n(我为此使用 list comprehension)并将字符串转换为整数。另外,如果你使用 range 而不是 numpys arange 你可以完全避免使用 numpy。

import matplotlib.pyplot as plt


#reading data from the file into the array
data = open('DATALOG1.TXT', 'r').read()
values = [int(f) for f in data.split("\n")]
time = range(len(values))

plt.bar(time, values, color='g', label='File Data')
plt.xlabel('Time', fontsize=12)
plt.ylabel('Magnitude', fontdsize=12)
plt.title('Magnitude changes', fontsize=20)
plt.show()