按列将嵌套列表写入 csv

Writing nested list into csv by column

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

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

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

Csv 应如下所示:

What i have tried:

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

任何帮助将不胜感激

您可以将列表转换为 numpy 数组并转置它

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

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

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

zip()

zip() 转置列表*,因此行变成列,列变成行。基于第二个link,你可以这样做:

import csv

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

如果这对您不起作用,请告诉我它不起作用的原因,以便我修复它。

*实际上 转置列表,它"aggregates elements from each of the iterables",在这种情况下本质上是相同的。

你快搞定了。您 运行 遇到问题的两个地方是:

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

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

2) 写入 header 行。首先,您需要写入该行中的所有列(您只写入一个)。此外,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.

您可以创建一个 dataframe,转置它然后设置 headers 并将其导出到 csv 文件

import pandas as pd    
signals_list =  [[1,4,7],[4,-7,1],[1,9,8]]
df = pd.DataFrame(data =signals_list ,columns=["a","b","c"]).T
df.columns = df.index.tolist()
df.to_csv("file.csv", index=False)