Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
597 views
in Technique[技术] by (71.8m points)

csv - Python: How do I use DictReader twice?

This feels like a very basic question, but I can't find any mention of it elsewhere. I'm a beginning Python user.

When I read in data using DictReader, and then use the dictionary, I'm unable to reference it again. For example, using this code:

#!/usr/bin/python

import csv
import cgi
import cgitb
cgitb.enable()

print "<head><title>Title</title></head><body>"

f = open("blurbs.csv","rb")
blurbs = csv.DictReader(f, delimiter="")
for row in blurbs:
    print row
for row in blurbs:
    print row

f.close()
print "</body>"

Will only print out the contents of blurbs.csv once. The second "for row in blurbs:" does nothing. Is there something I'm missing? How can I make the dictionary into something I can reference repeatedly?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You just need to seek the file back to the start:

with open("blurbs.csv","rb") as f:
    blurbs = csv.DictReader(f, delimiter="")
    for row in blurbs:
        print row
    f.seek(0)
    for row in blurbs:
        print row

Alternatively you can wrap the dictionary generation into a list of dicts and operate on that:

with open("blurbs.csv","rb") as f:
    blurbs = list(csv.DictReader(f, delimiter=""))
for row in blurbs:
    print row
for row in blurbs:
    print row

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...