You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python csv reader仅读取每个CSV文件的前200行?

解决CSV文件仅读取前200行的问题

我来帮你搞定这个效率优化的需求!要让每个CSV文件只读取表头之后的前200行,有两种简洁可靠的实现方式,我给你详细拆解:

方法1:使用itertools.islice(推荐,代码更优雅)

islice可以直接从迭代器中截取指定数量的元素,非常适合处理CSV这种逐行读取的场景。你只需要导入这个工具,然后替换原有的行遍历逻辑即可:

import nltk
import string
import math
import glob
import csv  # 原代码遗漏了csv模块,必须补上!
from collections import defaultdict
from nltk.corpus import stopwords
from itertools import islice  # 导入islice工具
import sentiment_mod as s

# 把停用词集合移到循环外,只创建一次,提升效率
stopwords_set = set(stopwords.words("english"))

lijst = glob.glob('21cf/*.csv')
tweets1 = []

for item in lijst:
    with open(item, encoding='latin-1') as d:
        reader1 = csv.reader(d)
        next(reader1)  # 跳过表头行
        # 仅读取表头后的前200行
        for row in islice(reader1, 200):
            tweets1.extend([row[2]])

# 后续文本处理逻辑保持不变
words_cleaned = [" ".join([words for words in sentence.split() if 'http' not in words and not words.startswith('@')]) for sentence in tweets1]
words_filtered = [e.lower() for e in words_cleaned]
words_without_stopwords = [word for word in words_filtered if word not in stopwords_set]
tweets1 = words_without_stopwords
tweets1 = list(filter(None, tweets1))

方法2:使用enumerate计数(无需额外导入模块)

如果不想引入新的模块,也可以通过计数的方式控制循环次数:

# 其他导入和初始化代码同上...

for item in lijst:
    with open(item, encoding='latin-1') as d:
        reader1 = csv.reader(d)
        next(reader1)  # 跳过表头
        # 用enumerate跟踪行数,超过200就停止
        for idx, row in enumerate(reader1):
            if idx >= 200:
                break
            tweets1.extend([row[2]])

# 后续文本处理逻辑不变...

额外优化提示

  • 我把stopwords_set移到了循环外部,避免每次处理文件都重复创建这个固定集合,能节省不必要的资源开销。
  • 原代码遗漏了import csv,这会导致csv.reader报错,已经帮你补上了。
  • 如果某个CSV文件在跳过表头后不足200行,两种方法都会自动读取到文件末尾,不会抛出错误,兼容性很好。

内容的提问来源于stack exchange,提问作者Nienke Luirink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:16