首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DictWriter/Reader

DictWriter/Reader
EN

Stack Overflow用户
提问于 2017-11-28 16:01:09
回答 1查看 107关注 0票数 1

我想用DictWriter将数据存储在csv中,然后用DictReader的另一个脚本读取数据。

如果该文件存在,我只想添加数据,如果不存在,则使用dict键创建它。我要这么做:

代码语言:javascript
复制
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存储带有listdict作为值,所以我使用了zip(),因为我知道这是可能的。每一秒,我都会将数据附加到每个列表中,然后每分钟存储一次。所以我得到了这样的东西:

代码语言:javascript
复制
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个元素

我在另一个问题上发现了这一点,但它只输出了文件的最后一行:

代码语言:javascript
复制
w = DictReader(csvwritefile)
reader = DictReader(csvwritefile)
for line_dict in reader:
     X = line_dict['X']

(这里的输出将是0.0)

(不好意思语法或语法不好.)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-28 16:40:51

下面是如何处理数据的这两件事。我不确定是否使用了分隔符,所以我猜它是一个制表符字符-但是如果它是其他的东西,您可以很容易地改变它。

代码语言:javascript
复制
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']
代码语言:javascript
复制
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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47535859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档