按列将嵌套列表写入csv

2024-10-01 07:46:31 发布

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

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

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

我想在csv文件中按列编写这些内部列表。我有176个内部列表,需要创建176个列。每个内部列表都有近39400个瞬间。

Csv应如下所示:

enter image description here

What i have tried:

writing nested list into csv python

write python list of list into 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()

OUTPUT

Output for my above code

我们将非常感谢您的帮助


Tags: csvpathname列表py3colwrmyfile
3条回答

你就快成功了。你遇到的两个问题是:

1)将signals_list粘贴到外部列表中。将signals_list直接传递给zip_longest,您应该被设置在那里:

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

2)写入标题行。首先,您需要编写该行中的所有列(您只需编写一列)。另外,writerow()需要iterable,这就是为什么在传递字符串时,每列只能得到一个字符。试试这个,省去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.

zip()

^{}转换一个列表*,因此行变成列,列变成行。根据第二个链接,您可以执行以下操作:

import csv

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(zip(*a))

如果这对你不起作用,请告诉我它怎么不起作用,这样我就可以解决它。你知道吗

*它实际上并不转置一个列表,而是“聚合来自每个iterables的元素”,在这种情况下,基本上是相同的。你知道吗

您可以在numpy数组中转换列表并将其转置

array = np.array(signals_list)
array = array.T

然后使用pandas创建一个数据帧并将其存储为csv

df = pd.DataFrame(array)
df.to_csv('my_signals.csv')

相关问题 更多 >