美文网首页Python小推车python模块
Python csv模块使用简介

Python csv模块使用简介

作者: Boer223 | 来源:发表于2019-03-26 16:52 被阅读44次

    CSV

    CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与Excel文件不同,CSV文件中:

    • 值没有类型,所有值都是字符串
    • 不能指定字体颜色等样式
    • 不能指定单元格的宽高,不能合并单元格
    • 没有多个工作表
    • 不能嵌入图像图表

    在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。

    不是每个逗号都表示单元格之间的分界。所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。

    使用简介

    Python csv模块封装了常用的功能,使用的简单例子如下:

    # 读取csv文件
    import csv
    with open('some.csv', 'rb') as f:        # 采用b的方式处理可以省去很多问题
        reader = csv.reader(f)
        for row in reader:
            # do something with row, such as row[0],row[1]
    
    import csv
    with open('some.csv', 'wb') as f:      # 采用b的方式处理可以省去很多问题
        writer = csv.writer(f)
        writer.writerows(someiterable)
    

    默认的情况下, 读和写使用逗号做分隔符(delimiter),用双引号作为引用符(quotechar),当遇到特殊情况是,可以根据需要手动指定字符, 例如:

    import csv
    with open('passwd', 'rb') as f:
        reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
        for row in reader:
            print row
    

    上述示例指定冒号作为分隔符,并且指定quote方式为不引用。这意味着读的时候都认为内容是不被默认引用符(")包围的。quoting的可选项为: QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE.
    有点需要注意的是,当用writer写数据时, None 会被写成空字符串,浮点类型会被调用 repr() 方法转化成字符串。所以非字符串类型的数据会被 str() 成字符串存储。所以当涉及到unicode字符串时,可以自己手动编码后存储或者使用csv提供的 UnicodeWriter, 具体可参见这里

    字典方式读写

    csv还提供了一种类似于字典方式的读写,方式如下:

    class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
    
    class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
    

    其中fieldnames指定字典的key值,如果reader里没有指定那么默认第一行的元素,在writer里一定要指定这个。

    使用示例

    # 读
    >>> import csv
    >>> with open('names.csv') as csvfile:
    ...     reader = csv.DictReader(csvfile)
    ...     for row in reader:
    ...         print(row['first_name'], row['last_name'])
    ...
    Baked Beans
    Lovely Spam
    Wonderful Spam
    
    
    # 写
    
    import csv
    with open('names.csv', 'w') as csvfile:
        fieldnames = ['first_name', 'last_name']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
        writer.writeheader()
        writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
        writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
        writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
    

    参考:

    相关文章

      网友评论

        本文标题:Python csv模块使用简介

        本文链接:https://www.haomeiwen.com/subject/nhknvqtx.html