想用Python对csv表格中的某一列数据进行关键词筛选

但是只会用全词匹配……就像line[1].decode('utf-8') == u'希区柯克'……如果要搜索包含某一关键词的项目应该怎么写呢?急求,谢谢!

line[1].decode('utf-8').find( u'希区柯克')>=0
表示当前数据包含有所查找的字符串'希区柯克'追问

请您帮我看看这是怎么回事,我只会一点C语言……

追答

你确定这些CSV文件都有8列吗,看这个错误超出列表范围,明显不足8列

而且我觉得line[1].decode('utf-8'),后面的decode('utf-8')可能会出错

追问

我完全不会用这种语言,我找了个模板想套一下……好像远超出8列啊。原模板命令是

对同样的csv文件可以执行,这个line[0]对应的是中国名字,line[4]对应的是字母A或B,line[7]对应的是外国导演名字, 有的奇长无比,line[5]对应的是日期19XXXXXX。有没有办法解决呢?

追答

将搜索的条件

if(line!=[]):
#匹配条件
改为
if len(line)>=8:
而且这个if的条件不需要放在括号里,

追问

非常感谢您的回答,并且基本解决了我的问题,谢谢!还有一点小问题希望您再帮一下

print line[33],这个line[33]里面是1949-10-01 0:00 的格式,好像没有办法输出,能再帮我解决一下吗?谢谢!

追答

不是说line[5]是日期吗,怎么又有一个日期,而且为什么会得到这么多列
打开csv文件看一下,观察里面的各列的分隔符是什么,比如分隔符是分号
就将打开csv文件的命令
reader=csv.reader(fp)

改为
reader=csv.reader(fp,delimiter=';')
用delimiter指定分隔符,应该没有这么多列的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-12
筛选第一个关键词的时候和平常一样,然后继续逐一筛选后面,筛选的时候按下图勾选上这个选项即可
第2个回答  2013-10-25
是索引列表超出了范围,不是每一行都有8列,所以要加异常处理。
#匹配条件
try:
if(。。。)
except IndexError:
do sth

使用decode要确认那一列是用什么编码的,那就用什么解码。一般英文系统是用ascii编码,有可能会出错,自己试下 喽。追问

我是小白,麻烦您看一下我对楼上的追问,谢谢!

相似回答