我目前正在尝试从here读取光谱图文件。当我运行以下代码时,文件的结果将填充一个列表。但是,在行“%.12f”上打印的所有值与手动打印的元素之间存在差异:例如,正确的初始值为0.751491727533,for循环以打印出列表中的所有元素0.003396112601。这确实是一个很奇怪的区别,因为for循环似乎只产生不稳定的gook元素,但是数组的手动索引产生了正确的元素。这不是一个大问题,因为我显然可以按顺序对正确的元素进行索引,但是这使我不知所措,试图弄清行为为何如此不同。
def skipToFrame(spectrogram, offset):
SAMPLE_RATE =22050
HOP_LENGTH = 512
FRAME_TIME = HOP_LENGTH/SAMPLE_RATE
SHIFT_FRAMES = round(offset/FRAME_TIME)
a_list = []
with open(spectrogram) as spectrogram_file:
for line in spectrogram_file.readlines():
for entry in line.split(" "):
a_list.append(float(entry))
spectrogram_file.close()
for entry in a_list:
print("%.12f" % entry)
print("list length is " + str(len(a_list)))
print(a_list[0])
def main():
track_left_spectrogram = "path to file"
skipToFrame(track_left_spectrogram,1)
if __name__ == '__main__' :
main()
预期结果应该是,在a_list循环中的for条目中,应根据this文件的值打印出a_list中的值。手动为a_list编制索引显然可以提供正确的结果,但是使用for循环最终可能会导致元素混乱或完全奇怪。
答案 0 :(得分:0)
a_list = []
with open("sample.txt") as f:
for line in f.readlines():
for entry in line.split(" "):
a_list.append(entry)
for entry in a_list[:-2]:
print("%.12f" % float(entry))
print("list length is " + str(len(a_list)))
print(a_list[0])
输出为
0.751491727533
2.798113439302
4.068138343604
17.569424700243
32.742568351020
23.357022526269
23.131132464710
9.801858358417
1.490128686136
0.034301546746
0.001143059877
0.000636652547
0.000168888218
0.000133326873
0.000084786511
0.000089979358
0.000030828024
0.000017362478
...
0.751491727533
请注意,当您将with
语句与open函数一起使用时,不需要最后关闭文件,因为with会自动为您关闭文件
答案 1 :(得分:0)
该代码似乎工作正常,如果仅打印前10个代码,则显示正确的顺序。如果将它们全部打印出来,我认为您的终端无法显示946176行,因此它会像我的一样将其切断。
for entry in a_list[:10]:
print("%.12f" % entry)