Python提取CSV中含指定印尼语词汇的推特数据失败,求解决
解决CSV筛选印尼语词汇的问题
你的代码里有几个关键问题导致没有输出结果,我来帮你一一修正并给出可行的解决方案:
原代码的核心问题
- 直接对
csv.reader对象调用re.search():csv.reader是行迭代器而非字符串,正则表达式无法直接匹配它,必须遍历每一行后检查行内内容。 - 循环内重复创建目标文件:每次循环用
w模式打开文件会清空之前的内容,且频繁IO操作效率极低,应该在循环外一次性打开目标文件。 - 错误使用
writer.writerows():该方法接受行的列表(比如[[行1元素], [行2元素]]),你传入的是单一行的元素列表,应该用writer.writerow(row)写入单行。 - 未同时匹配两个目标词汇:原代码只检查了
macet,遗漏了kecelakaan。
修正后的代码
import re import csv # 预编译正则表达式,匹配两个印尼语词汇,忽略大小写 target_pattern = re.compile(r'macet|kecelakaan', re.IGNORECASE) # 同时管理源文件和目标文件,指定编码避免Windows下的乱码问题 with open('example1.csv', 'r', encoding='utf-8') as source_file, \ open('example2.csv', 'w', newline='', encoding='utf-8') as target_file: csv_reader = csv.reader(source_file) csv_writer = csv.writer(target_file) # 保留表头(如果你的CSV有表头的话,没有则删除下面两行) header_row = next(csv_reader) csv_writer.writerow(header_row) # 遍历每一行,检查是否包含目标词汇 for row in csv_reader: # 把当前行的所有字段拼接成字符串,确保不会漏掉任何字段里的目标词 row_content = ' '.join(row) if target_pattern.search(row_content): csv_writer.writerow(row) print(f"已写入符合条件的行: {row}") print("筛选并写入操作完成!")
代码细节说明
- 正则优化:用
re.compile()预编译正则提升效率,re.IGNORECASE可以匹配大小写变体(比如Macet、KECELAKAAN)。 - 文件操作优化:用
with语句同时管理两个文件,newline=''避免Windows下写入CSV时出现多余空行。 - 表头处理:如果你的CSV有表头,先读取并写入目标文件保证结构一致;没有表头则删除表头相关代码即可。
- 全字段检查:将整行字段拼接成字符串后再匹配,确保不会漏掉任何单元格里的目标词汇。
额外排查建议
- 如果出现编码错误,可尝试把
encoding='utf-8'替换为encoding='cp1252'(Windows系统常用编码)。 - 先在Excel里打开源文件,手动搜索
macet或kecelakaan确认这些词汇确实存在。
内容的提问来源于stack exchange,提问作者Ranee
相关产品推荐
相关产品推荐

