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

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("筛选并写入操作完成!")

代码细节说明

  1. 正则优化:用re.compile()预编译正则提升效率,re.IGNORECASE可以匹配大小写变体(比如Macet、KECELAKAAN)。
  2. 文件操作优化:用with语句同时管理两个文件,newline=''避免Windows下写入CSV时出现多余空行。
  3. 表头处理:如果你的CSV有表头,先读取并写入目标文件保证结构一致;没有表头则删除表头相关代码即可。
  4. 全字段检查:将整行字段拼接成字符串后再匹配,确保不会漏掉任何单元格里的目标词汇。

额外排查建议

  • 如果出现编码错误,可尝试把encoding='utf-8'替换为encoding='cp1252'(Windows系统常用编码)。
  • 先在Excel里打开源文件,手动搜索macet或kecelakaan确认这些词汇确实存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:06:35