首页 > 解决方案 > 按列将嵌套列表写入csv

问题描述

我有一个列表列表,如下所示:

signals_list = [ [1,4,7..... 5,7],[4,-7,1....-5,-8,4],.....]

我想在 csv 文件中逐列写入这些内部列表。我有 176 个内部列表,需要制作 176 个列。每个内部列表都有近 39400 个瞬间。

CSV 应如下所示:

在此处输入图像描述

我试过的:

将嵌套列表写入csv python

将列表的python列表写入csv python

我做了什么

# GETTING ALL THE WAV FILES FROM DIRECTORY AND CONVERTING INTO NUMPY ARRAY
path = "C:/Users/Marwat/.spyder-py3/FYP/input/set_a/"
files = os.listdir(path)
print(len(files))
signals_list = []
for filename in glob.glob(os.path.join(path, '*.wav')):
    sample_rate, data = wavfile.read(filename)
    signals = [np.array(data,dtype=int)]
    signals_list.append(signals)


# WRITING SIGNALS TO CSV FILE
d = [signals_list]
col_name = 1
transposed_signals = zip_longest(*d, fillvalue = '')
with open('C:/Users/Marwat/.spyder-py3/FYP/input/numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
      wr = csv.writer(myfile)
      wr.writerow('sound_'+ str(col_name))
      wr.writerows(transposed_signals)
      col_name +=1
myfile.close()

输出

我上面的代码的输出

任何帮助将不胜感激

标签: pythonlistcsvwritefile

解决方案


你几乎明白了。您遇到问题的两个地方是:

1)坚持signals_list在外部列表中。signals_list直接传递到zip_longest,你应该在那里设置:

transposed_signals = list(zip_longest(*signals_list, fill_value = ''))

2) 写标题行。首先,您需要写入该行中的所有列(您只写一个)。此外,writerow()需要一个可迭代的,这就是为什么当您传递一个字符串时,每列会得到一个字符。试试这个,并省略col_name

wr.writerow(('sound_' + str(i + 1) for i in range(len(transposed_signals))))

把它们放在一起(只是第二部分),你应该有:

transposed_signals = list(zip_longest(*signals_list, fillvalue=''))
with open('C:/Users/Marwat/.spyder-py3/FYP/input/numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
    wr = csv.writer(myfile)
    wr.writerow(('sound_' + str(i + 1) for i in range(len(transposed_signals))))
    wr.writerows(transposed_signals)

# Calling myfile.close() isn't necessary since `with` does that automatically upon exiting that scope.

推荐阅读