我有两个.csv文件,都包含3001行,我必须对它们做同样的事情,所以我想知道我是否可以把它放入1 for循环。你知道吗
所以我想聪明点,试着这样做:
self.csv_readingon = csv.reader(open('heisig6_reading_ja_on.csv'))
self.csv_readingkun = csv.reader(open('heisig6_reading_ja_kun.csv'))
for [d1, d2] in [self.csv_readingon, self.csv_readingon]:
for i, d in enumerate([d1, d2]):
# Do same stuff to both files
然而,这会导致:
for [d1, d2] in [self.csv_readingon, self.csv_readingon]:
ValueError: too many values to unpack (expected 2)
有没有可能把它很好地放在一个for循环中,或者我应该为一个文件(d1)做一个for循环,然后手动从第二个csv文件分配一行到d2?你知道吗
编辑:.csv文件彼此不相关。两者都将放在SQLite数据库中的一个单独的表中。所以元组可能不是我们要走的路。它们只是具有相同的结构,所以只有表名不同。你知道吗
结合使用enumerate和zip:
编辑:如果你想把每个文件的数据放到一个不同的表中,让一个for循环先遍历一个文件的所有行,然后遍历另一个文件的所有行是行不通的。同样,zip解决方案在这里也不太好,因为它是简单的巧合(?)两个文件的长度相同。我将for循环放入一个以文件句柄和表名为参数的函数中,并首先为第一个和第二个文件调用这个函数。你知道吗
你也可以试试这个:
csv.reader
是iterables。链接两个iterable的最简单方法是使用itertools.chain()
:所以在你的情况下:
现在给出了附加的解释(将行插入两个结构相似但名称不同的不同表中),这样做行不通。您可以尝试通过向读取器传递表名来实现智能和“通用”,即:
但一旦一个或另一个csv和相关的表结构发生变化,就会中断。你知道吗
相关问题 更多 >
编程相关推荐