[英]Python 2.7 exporting data in a .csv
我有這段代碼用於從串口連接的機器收集數據,然后重新排序數據。 我可以在最后成功打印我的數據: print pigment_data
但是,我不知道如何將此數據導出到.csv
文件。
有沒有直接的方法來做到這一點?
非常感謝你,
阿德里安
import serial # requires pyserial library
import csv
ser = serial.Serial(0)
data = []
while True:
name = raw_input("Pigment name [DONE to finish]: ")
if name == "DONE":
break
pigment_data = []
first = True
main_spect = []
while True:
line = ser.readline()
if first:
print " Data incoming..."
first = False
split = line.split()
if 10 <= len(split):
try:
wavelength = int(split[0])
measurements = [float(split[i]) for i in [2,4,6,8,10]]
pigment_data.append({"wavelength": wavelength,
"measurements": measurements})
main_spect.append(measurements[2])
except ValueError:
pass # handles the table heading
if line[:3] == "110":
break
data.append({"name": name,
"data": pigment_data})
print " Data gathered."
print pigment_data
# here's the problem:
with open('spectral_data.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(pigment_data)
你收集了一個字典列表,在這里使用csv.DictWriter()
來改善它:
with open('spectral_data.csv', 'ab') as f:
writer = csv.DictWriter(f, ('name', 'data'))
writer.writerow(data[-1])
這也會以append-mode打開文件,因為每次循環都會打開一次文件。 我在這里使用了data[-1]
,因為這是你在循環中添加的最后一個條目。
您可能希望將writer
對象的創建移出循環:
with open('spectral_data.csv', 'wb') as f:
writer = csv.DictWriter(f, ('name', 'data'))
while True:
name = raw_input("Pigment name [DONE to finish]: ")
# ....
print pigment_data
writer.writerow(data[-1])
它會在您收集CSV文件時將您收集的最新條目寫入。
最后但並非最不重要的是,您還可以在外部后一次寫入整個data
列表, while True:
完成:
data = []
while True:
name = raw_input("Pigment name [DONE to finish]: ")
# ....
with open('spectral_data.csv', 'ab') as f:
writer = csv.DictWriter(f, ('name', 'data'))
writer.writerows(data)
來自csv.writer
的幫助:
writer(...)
csv_writer = csv.writer(fileobj [, dialect='excel']
[optional keyword args])
for row in sequence:
csv_writer.writerow(row)
[or]
csv_writer = csv.writer(fileobj [, dialect='excel']
[optional keyword args])
csv_writer.writerows(rows)
The "fileobj" argument can be any object that supports the file API.
所以基本上你想要:
with open('spectral_data.csv', 'wb') as f:
writer = csv.writer(f)
for row in pigment_data:
writer.writerow(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.