免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10491 | 回复: 7
打印 上一主题 下一主题

关于python的csv问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-29 18:20 |只看该作者 |倒序浏览
我想在表格的第一列搜索例如U16开头的一片区域,把他们所在的row拉出来单独放在一块,想请大家给小弟一点方向性指导,我还在解决如何匹配的问题:
import csv,re
with open (r'C:\Documents and Settings\cocheng\Desktop\nets_report.csv','rb') as f:
        reader=csv.reader(f)
        for row in reader:
                colnum=0
                for col in row:
                        if True:
                                m=re.match('U16.*',row[colnum])
                                m.group()         
                        colnum+=1
我暂时只懂遍历整个表格,幻想像上面这样匹配,好像还是因为row[colnum]不是str
怎样才能正确的实现我想要的功能?

论坛徽章:
0
2 [报告]
发表于 2013-08-01 11:20 |只看该作者
本帖最后由 evenYc 于 2013-08-01 16:15 编辑

lines=[line.strip() for line in open(r'file.csv')]
for x in lines:
        match=re.search('U16.*',x)
        if match; print x
如上的代码,只要某row里任一colum有U16,就把那个row的值都输出,如何要只输出有U16的那个cell?

论坛徽章:
0
3 [报告]
发表于 2013-08-01 14:50 |只看该作者
1.csv文件是文本文件。
2.你要处理和输出的是 列column,而你的代码中,却输出的是lines行,岂不是矛盾了?

论坛徽章:
0
4 [报告]
发表于 2013-08-01 16:18 |只看该作者
回复 3# crifan


    恩,但循环遍历的时候按row或colnum一样的吧,我只是想打印匹配的cell,但如2楼,整个row的值都打印了

论坛徽章:
0
5 [报告]
发表于 2013-08-01 17:45 |只看该作者
“但循环遍历的时候按row或colnum一样的吧”
逻辑上,算是一样的,但是由于csv是文本文件,不像excel是对象,据我了解,没法拿到column的list,所以,你也没法去遍历column啊。

同理,按照你的处理思路,拿到的只是普通文本,也没法,直接获得对应的cell值。

到目前为止,我实在看不懂你想要做什么。。。

论坛徽章:
0
6 [报告]
发表于 2013-08-02 11:12 |只看该作者
回复 5# crifan


    我是想查找csv文件,然后找到colnumA为目标值(如’U16‘)的那些row,在那片区域的前后插入空行

  不知道还有没有其他读取文件的方法,如2楼已经把每个cell都分隔成字符串了,可以用re匹配,我是想然后re.start(),  re.end(),来获取位置,不过完全不对,
  按2楼只要有row匹配,print x会打印整个row的值,这样用start,end返回值是匹配项所在row的位置,不是整个文件的位置,所以应该还是读文件的方法不对吧


可能我语法思路上有错误,我对编程还没入门,边google一些内容,边在这边发问,个人水平比较低级,请多包含,多指教

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
7 [报告]
发表于 2013-08-02 13:45 |只看该作者
别想那么多了,读取csv后,逐行直接用逗号split掉,得到的strlist可看作数据的一行,其中的每一项可看作为一个cell。然后对字符串列表中的每一项进行相应的匹配或处理。

论坛徽章:
0
8 [报告]
发表于 2013-08-08 15:43 |只看该作者
本帖最后由 evenYc 于 2013-08-08 15:57 编辑

没注意原来文档里面还有个csvreader.line_num

for row in reader:
                m=re.match('U16.+',','.join(row))
                if m:
                        print reader.line_num
瞬间得到要的row
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP