按列将嵌套列表写入 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)
我有一个列表列表如下所示:
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)