[英]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應該看起來像這樣:
我試過的
我做了什么
# 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.