Python:如何使用DictReader两次?
这感觉像是一个非常基本的问题,但我在其他地方找不到任何提及。我是Python的新手 当我使用DictReader读入数据,然后使用字典时,我无法再次引用它。例如,使用以下代码:Python:如何使用DictReader两次?,python,csv,dictionary,Python,Csv,Dictionary,这感觉像是一个非常基本的问题,但我在其他地方找不到任何提及。我是Python的新手 当我使用DictReader读入数据,然后使用字典时,我无法再次引用它。例如,使用以下代码: #!/usr/bin/python import csv import cgi import cgitb cgitb.enable() print "<head><title>Title</title></head><body>" f = open("bl
#!/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="\t")
for row in blurbs:
print row
for row in blurbs:
print row
f.close()
print "</body>"
#/usr/bin/python
导入csv
导入cgi
进口cgitb
cgib.enable()
打印“标题”
f=打开(“blurbs.csv”、“rb”)
blurbs=csv.DictReader(f,分隔符=“\t”)
对于布告中的行:
打印行
对于布告中的行:
打印行
f、 关闭()
打印“”
将只打印blurbs.csv的内容一次。第二行的“广告语:”什么也不做。有什么我遗漏的吗?我怎样才能使词典成为我可以反复引用的内容?您只需从头开始查找文件:
with open("blurbs.csv","rb") as f:
blurbs = csv.DictReader(f, delimiter="\t")
for row in blurbs:
print row
f.seek(0)
for row in blurbs:
print row
或者,您可以将字典生成包装到一个dict列表中,并对其进行操作:
with open("blurbs.csv","rb") as f:
blurbs = list(csv.DictReader(f, delimiter="\t"))
for row in blurbs:
print row
for row in blurbs:
print row
在Python(以及几乎所有的计算机语言)中,如果要存储某些内容,必须显式地进行存储。只是打印出来并不能把它保存在任何地方,除了屏幕上
重复使用每一本字典,但每次只使用一本,这很容易<代码>行已存储每个字典,一次存储一个:
for row in blurbs:
print row
print row
print row
要重复使用所有字典,您需要将所有字典存储在某个位置 它们已经在
blurbs
中了,但是blurbs
是一个可以循环一次的东西。一旦你做完了,里面就什么都没有了。这就是为什么你的第二个循环什么也不打印
你想要一个——你可以索引、搜索、循环几十次,等等。当没有特殊情况需要担心时,最明显的序列类型是一个列表。因此:
with open("blurbs.csv","rb") as f:
blurbs = csv.DictReader(f, delimiter="\t")
rows = list(blurbs)
for row in rows:
print row
print rows[13]
for row in rows:
print row
print sorted(rows)
上的教程部分和以下部分对此进行了解释。如果您想重新使用读卡器,可以将文件查找回0。但是,如果csv中的第一行是标题,则这将是输出的一部分:
>>> f = open( 'file.csv', 'rbU' )
>>> reader = csv.DictReader( f )
>>> reader.next()
{'col1': '6', 'col2': '0.9', 'col3': '8'}
>>> f.seek(0)
>>> reader.next()
{'col1': 'col1', 'col2': 'col2', 'col3': 'col3'}
>>> f.close()
DictReader使用第一行作为字典键(如果没有提供)。创建一个新的reader对象要简单得多。您还可以将数据复制到数据结构(如列表)中,并在其上循环。这并不是真正的“使字典成为我可以重复引用的内容”添加了解决第二个问题的替代方案。