带有csv的DictWriter / Reader

时间:2017-11-28 16:01:10

标签: python csv dictionary

我希望将数据存储在带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 dictlist 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

(抱歉语法或语法不好......)

1 个答案:

答案 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']