如何用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
相关产品推荐
相关产品推荐

