簡體   English   中英

按列將嵌套列表寫入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應該看起來像這樣:

在此處輸入圖片說明

我試過的

將嵌套列表寫入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()

OUTPUT

我上面的代碼的輸出

任何幫助將不勝感激

你差不多了。 您遇到問題的兩個地方是:

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.

您可以將列表轉換為numpy數組並進行轉置

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

然后使用熊貓創建一個DataFrame並將其存儲為csv

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

zip()

zip()轉置一個列表*,因此行變成列,而列變成行。 根據第二個鏈接,您可以執行以下操作:

import csv

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

如果這對您不起作用,請告訴我它如何不起作用,以便我進行修復。

*它實際上並沒有轉置列表,而是“聚合來自每個可迭代對象的元素”,在這種情況下,本質上是相同的。

您可以創建一個dataframe ,進行轉置,然后將標題設置到位,並將其導出到一個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM