如何将文本文件中的一维数据读入一维数组? [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()
我有一个文本文件 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()