zoukankan      html  css  js  c++  java
  • 处理csv

    python中有一个读写csv文件的包,直接import csv即可。

    csv文件的性质:

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

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

    excel形式

    存储为csv文件

    假设上述csv文件保存为"A.csv",如何用Python像操作Excel一样提取其中的一列,即一个字段,利用Python自带的csv模块,有两种方法可以实现:

    一、 csv.reader()方法

    reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:

    1. 一行行取csv文件里的内容 

    with open('A.csv','rb') as csvfile:
        reader = csv.reader(csvfile)
        rows= [row for row in reader]
    # print rows得到: ['1', 'Apple', '12', '98'], ['2', 'Ben', '13', '97'], ['3', 'Celia', '14', '96'], ['4', 'Dave', '15', '95']]

    2. 提取某一列

    要提取其中某一列,可以用下面的代码:

    ith open('A.csv','rb') as csvfile:
        reader = csv.reader(csvfile)
        column = [row[2] for row in reader]
    
    #print column得到: ['11','12','13','14','15']

     注意: 从csv读出的都是str类型。这种方法要事先知道列的序号,比如Age在第2列,而不能根据'Age'这个标题查询。

    二、csv.DictReader()方法

    2.1 读取全部行

    使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

    with open('A.csv','rb') as csvfile:
        reader = csv.DictReader(csvfile)
        column = [row for row in reader]
    
    #print column得到: 
    
    {'Age': '13', 'No.': '2', 'Score': '97', 'Name': 'Ben'},
    {'Age': '14', 'No.': '3', 'Score': '96', 'Name': 'Celia'},
    {'Age': '15', 'No.': '4', 'Score': '95', 'Name': 'Dave'}]

    2.2 读取某一列

    如果我们想用DictReader读取csv的某一列,就可以用列的标题查询:

    with open('A.csv','rb') as csvfile:
        reader = csv.DictReader(csvfile)
        column = [row['Age'] for row in reader]
    print column
    # 就得到: ['12', '13', '14', '15']

     三、csv.writer()方法

    3.1 用with open写

    import csv
    with open("test.csv","w") as csvfile: 
        writer = csv.writer(csvfile)
        #先写入columns_name
        writer.writerow(["index","a_name","b_name"])
        #写入多行用writerows
        writer.writerows([[0,1,3],[1,2,3],[2,3,4]])
    
    index   a_name  b_name
    0       1       3
    1       2       3
    2       3       4

    3.2 用open写

    out = open(outfile, 'w', newline='')
    csv_writer = csv.writer(out, dialect='excel')
    csv_writer.writerow(list)
    
    # 必须添加newline='',和 dialect='excel',否则会导致文件每一行后面会多一个空行

    四、pandas包

    import pandas as pd
    
    #任意的多组列表
    a = [1,2,3]
    b = [4,5,6]    
    
    #字典中的key值即为csv中列名
    dataframe = pd.DataFrame({'a_name':a,'b_name':b})
    
    #将DataFrame存储为csv,index表示是否显示行名,default=True
    dataframe.to_csv("test.csv",index=False,sep='')
       a_name  b_name
    0       1       4
    1       2       5
    2       3       6

    同样pandas也提供简单的读csv方法

    import pandas as pd
    data = pd.read_csv('test.csv')

    会得到一个DataFrame类型的data,不熟悉处理方法可以参考pandas十分钟入门

  • 相关阅读:
    【转】glumer Appium + Python环境搭建(移动端自动化)
    【转】自动化测试
    【转】RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第二篇【原理】
    [转]RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第一篇【安装】
    异常测试实践与梳理
    加关注
    RF上传图片各种失败坑,使用pywin32来操作windows窗体
    2019年1月23日,好像是这个日子,RF发布了 1.7.3.1 支持python3.6以上了,安装成功。
    虚拟化技术基础
    PostgreSQL 写入数据到Excel时出现 Faithfully yours, nginx 错误处理
  • 原文地址:https://www.cnblogs.com/zz27zz/p/9777723.html
Copyright © 2011-2022 走看看