Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
596 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 Answer

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...