反复从Python中读取CSV?

mat*_*att 22 python csv

我正在尝试检查已提取的csv提取数据的值.它只会遍历CSV的行一次,我只能检查feed.items()的一个值.我需要重置某个值吗?有没有更好/更有效的方法来做到这一点?谢谢.

orig = csv.reader(open("googlel.csv", "rb"), delimiter = ';')
goodrows = []
for feed in gotfeeds:    
   for link,comments in feed.items():
       for row in orig:
           print link
           if link in row[1]:
               row.append(comments)
               goodrows.append(row)
Run Code Online (Sandbox Code Playgroud)

Cer*_*rin 36

您可以通过重置文件对象的读取位置来"重置"CSV迭代器.

data = open("googlel.csv", "rb")
orig = csv.reader(data, delimiter = ';')
goodrows = []
for feed in gotfeeds:    
   for link,comments in feed.items():
       data.seek(0)
       for row in orig:
           print link
           if link in row[1]:
               row.append(comments)
               goodrows.append(row)
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 12

制作orig列表避免了重置/重新分析csv的需要:

orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';'))
Run Code Online (Sandbox Code Playgroud)

  • 这在技术上可行,但会将整个CSV文件加载到内存中.如果文件很小,这不是一个大问题,但这不会扩展. (6认同)
  • 速度和空间之间存在权衡.如果你有空间,使用列表会更快,因为不会重新解析csv.这不是哪种方法更好的问题,而是哪种方法更适合OP的情况.由于他没有解释CSV的大小,因此任何一种方法都可能更合适. (4认同)
  • 根据我的经验,规划可扩展性更好,然后假设没有必要.在这种情况下,使其可扩展也不会减慢速度,因为CSV解析非常简单. (2认同)