将文件读入列表的for循环与lis中元素的顺序之间存在差异

2024-10-02 10:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从here读取光谱图文件。当我运行下面的代码时,文件中的结果将填充一个列表。但是,行“%.12f”上打印的所有值与手动打印的元素之间存在差异:例如,正确的初始值为0.751491727533,打印列表中所有元素的for循环从0.003396112601开始。这是一个非常奇怪的区别,因为for循环似乎只生成gobbledy 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\u list循环的for条目中,a\u list中的值应该按照this文件的值打印出来。手动索引a_列表显然给出了正确的结果,但是使用for循环可能会导致元素无序或非常奇怪。你知道吗


Tags: 文件in元素列表formaindef手动
2条回答
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

注意,在open函数中使用with语句时,不需要在结尾关闭文件,因为with将自动为您关闭它

代码似乎工作得很好,如果只打印前10个,它将显示正确的顺序。如果你把它们全部打印出来,我想你的终端不能显示946176行,所以它会像我的一样把它切断。你知道吗

for entry in a_list[:10]:
    print("%.12f" % entry)

相关问题 更多 >

    热门问题