我希望将数据存储在带DictWriter
的csv中,然后使用DictReader
的其他脚本读取它们。
如果文件存在,我只想添加数据,如果没有,我用dict键创建它。 我这样做:
log_dict = {'X':list_X_data ,'Y':list_X_data,'time':list_time_data}
if( path.exists(file) ):
with open(file, 'a') as csvwritefile:
writer = csv.writer(csvwritefile, delimiter = ",")
try:
writer.writerows(zip(*[log_dict[key] for key in sorted(log_dict.keys())]))
csvwritefile.close()
except IOError:
print("IO Error", file)
csvwritefile.close()
else:
with open(file, 'w') as csvwritefile:
w = csv.DictWriter(csvwritefile, sorted(log_dict.keys()))
try:
w.writeheader()
except IOError:
print("IO Error", file)
csvwritefile.close()
我不知道如何使用DictWriter
dict
与list
s存储值,因此我使用zip()
,因为我知道这是可能的。每一秒我都会将数据附加到每个列表,然后每分钟存储一次。
所以我得到了类似的东西:
Heure X Y
16:12:16 0.9 4.5
16:12:17 0.8 0.9
16:12:18 0.0 0.9
我想知道如何使用 DictReader 读取此文件并获取示例, X的所有行 或只需最后60个元素。
我发现这是另一个问题,但它只输出文件的最后一行:
w = DictReader(csvwritefile)
reader = DictReader(csvwritefile)
for line_dict in reader:
X = line_dict['X']
(此处的输出将为0.0
)
(抱歉语法或语法不好......)
答案 0 :(得分:0)
以下是如何使用您的数据执行这两项操作。我不确定使用的分隔符,所以猜测它是一个制表符 - 但是如果它是其他东西你可以很容易地改变它。
import csv
filename = 'timing_data.csv'
# Get all the X values.
with open(filename, 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
x_values = [row['X'] for row in reader]
print(x_values) # -> ['0.9', '0.8', '0.0']
from collections import deque
filename = 'timing_data.csv'
# Get the last "N" X values.
N = 2
with open(filename, 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
last_N_x_values = list(deque((row['X'] for row in reader), N))
print(last_N_x_values) # -> ['0.8', '0.0']