我正在编写一个脚本,需要在脚本中多次使用csv.reader()。我在脚本的早期使用它来填充带有初始主键数据的sqlite3表。然后我再次使用它来根据csv中的内容改变表的数据(我保证这个订单有合理的原因)。
问题出现了第二次 - 我的sqlite3表肯定是用第一个csv阅读器填充的,这意味着第一个csv.reader()可以工作,因为那是数据的来源。但是,当我稍后迭代它时,没有数据。看起来csv.reader()完全是空的。
csv.reader()是否只允许每个脚本使用一个csv.reader()对象?我无法想象那种情况。
这是有效的代码:(用初始数据填充我的表)
<header>
<div id="Logo">
<img src="C:\Users\Mihajlo\Desktop\retardirani mihajlo\reeee1.png" width="196px" height="124px">
</div>
<nav>
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">CATALOG</a></li>
<li><a href="#">CONTACT</a></li>
</nav>
</header>
以下是同一脚本中不会出现的代码:
for file in files:
f = open(file)
csv_f = csv.reader(f)
count = 0
for row in csv_f:
#more code
f.close()
列表的类型不是什么吓坏了,对吧?我对如何解决这个问题感到很茫然。
答案 0 :(得分:0)
list(csv_n)
表达式将生成list
csv行:
>>> import csv
>>> f = open("ooo.csv", "rb")
>>> r = csv.reader(f)
>>> list(r)
[['a', 'b', 'c'], ['1', '2', '3']]
它不 a&#34;类型转换&#34; (提示:没有&#34;类型转换&#34;在Python中),不会改变你的&#34; csv&#34;进入其他任何事情。
>>> r
<_csv.reader object at 0x7f34964b7600>
实际上它完全与手动构建列表相同,即使用:
>>> lst = []
>>> for row in r:
>>> lst.append(row)
但速度更快,代码更少。
唯一的副作用是 - 就像手动迭代一样 - 它将读取整个文件,因此将文件指针设置在文件的末尾,因此尝试重用相同的csv阅读器(或文件本身) )没有像预期的那样工作。如果要重新读取csv,则必须在开头重置文件指针:
>>> r.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> f.seek(0)
>>> r.next()
['a', 'b', 'c']
所以无论你的问题是什么(&#34;一切都被打破&#34;完全无用的问题描述BTW),它不是使用list(csv_n)
,而是很可能不理解它的作用。
NB:你写的那个
然而,当我稍后迭代它时,没有数据。看起来csv.reader()完全是空的
如果您尝试在<{strong> csv_n
行之后迭代thisList = list(csv_n)
,那么当然您将无法获得任何结果,cf以上。只需将文件指针倒回到开头,就可以了。