美文网首页Python基础WEPython
Python文件读写(excel、csv、txt)

Python文件读写(excel、csv、txt)

作者: 桃桃沙弥 | 来源:发表于2019-05-15 12:47 被阅读15次

    读写xls、xlsx

    可使用open、xlrd/xlwt、openpyxl。重点介绍openpyxl。

    openpyxl官方文档:http://openpyxl.readthedocs.io/en/stable/index.html

    安装使用pip install openpyxl即可。

    基本语法介绍:

    1. 写操作
    • 创建工作簿
    >>> from openpyxl import Workbook
    >>> wb = Workbook()
    
    image.gif
    • 获取第一个工作表
    >>> ws = wb.active
    
    image.gif
    • 创建工作表
    >>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
    # or
    >>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
    
    image.gif
    • 表名修改
    >>>ws.title = "New Title"
    
    image.gif
    • 通过工作表名索引
    >>> ws3 = wb["New Title"]
    
    image.gif
    • 获取工作表名字

    (1)wb.sheetnames

    (2)

    >>> for sheet in wb:
    ...     print(sheet.title)
    
    image.gif
    • 工作表复制
    >>> source = wb.active
    >>> target = wb.copy_worksheet(source)
    
    image.gif
    • 单元格索引

    单单元格

    >>> ws['A4'] = 4
    
    image.gif

    或者:

    d = ws.cell(row=4, column=2, value=10)
    
    image.gif

    计数由1开始。

    多单元格

    >>> cell_range = ws['A1':'C2']
    
    image.gif
    • 行、列索引
    >>> colC = ws['C']
    >>> col_range = ws['C:D']
    >>> row10 = ws[10]
    >>> row_range = ws[5:10]
    
    image.gif
    • 单元格内容添加
    >>> for row in range(1, 40):
    ...     ws1.append(range(600))
    
    image.gif

    可以实现每一行逐个单元格写入

    • 遍历

    遍历所有行/列:

    使用tuple(ws.rows)/tuple(ws.columns)

    >>> ws = wb.active
    >>> ws['C9'] = 'hello world'
    >>> tuple(ws.rows)
    ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
    (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
    (<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
    (<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
    (<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
    (<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
    (<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
    (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
    (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
    
    image.gif

    遍历指定单元格:

    使用iter_rows()/iter_cols()

    >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    ...    for cell in row:
    ...        print(cell)
    <Cell Sheet1.A1>
    <Cell Sheet1.B1>
    <Cell Sheet1.C1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B2>
    <Cell Sheet1.C2>
    
    image.gif
    >>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
    ...     for cell in col:
    ...         print(cell)
    <Cell Sheet1.A1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B1>
    <Cell Sheet1.B2>
    <Cell Sheet1.C1>
    <Cell Sheet1.C2>
    
    image.gif

    两种方法,遍历的元素相同,但是顺序不同。

    遍历读值:


    image.png
    • 储存
    >>> wb.save('balances.xlsx')
    
    image.gif

    保存更改之后,写操作完成。

    2.读操作

    • 读取
    >>> from openpyxl import load_workbook
    >>> wb2 = load_workbook('test.xlsx')
    
    
    image.gif
    • 获取已有的工作表
    >>> print wb2.get_sheet_names()
    ['Sheet2', 'New Title', 'Sheet1']
    
    image.gif

    其他表索引、单元格索引操作与前面提到的相同,不再赘述。还有其他的一些函数与属性,比较少用,详见官方文档。

    读写csv文件

    可使用open、python内置csv库和pandas提供的read_csv方法。python提供的csv库已经可以满足大部分的文件处理需求,但是其实基于行的操作,read_csv可以配合pandas的一些数据处理方法使用,可以行、列双向操作,更加方便。本文中将重点介绍csv库,并提供一些read_csv方法相关介绍外链。

    csv库

    官方文档:https://docs.python.org/2/library/csv.html#module-csv

    不需要另外安装,直接导入使用。

    import csv
    
    image.gif
    • 读取

    • **reader(csvfile, dialect='excel', fmtparams)

    csvfile,必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象,如果是文件对
    象,打开时需要加"b"标志参数。

    dialect,编码风格,默认为excel的风格,也就是用逗号(,)分隔,dialect方式也支持自定义,通过调用register_dialect方法来注册,下文会提到。

    fmtparam,格式化参数,用来覆盖之前dialect对象指定的编码风格。

    返回一个list,list的原始是文件的行内容。每一行也是一个list,list的元素是每个单元格。增减行与单元格可以通过list的操作进行。list的相关操作见:http://www.runoob.com/python/python-lists.html

    一个例子:

    >>> import csv
    >>> with open('eggs.csv', 'rb') as csvfile:
    ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    ...     for row in spamreader:
    ...         print ', '.join(row)
    Spam, Spam, Spam, Spam, Spam, Baked Beans
    Spam, Lovely Spam, Wonderful Spam
    
    image.gif

    例子中把每行中的内容,通过‘, ’分隔符连接了起来

    注意:如果csvfile是一个文件对象,那么它必须用“b”标志打开(open('eggs.csv', 'rb'))

    • 写入

    writer(csvfile, dialect='excel', **fmtparams)

    with open('t.csv','wb') as myFile:      
        myWriter=csv.writer(myFile)  
        myWriter.writerow([7,'g'])  
        myWriter.writerow([8,'h'])  
        myList=[[1,2,3],[4,5,6]]  
        myWriter.writerows(myList) 
    
    image.gif

    'w'表示写模式。

    首先open()函数打开当前路径下的名字为't.csv'的文件,如果不存在这个文件,则创建它,返回myFile文件对象。

    csv.writer(myFile)返回writer对象myWriter。

    writerow()方法是一行一行写入,writerows方法是一次写入多行。

    注意:如果文件't.csv'事先存在,调用writer函数会先清空原文件中的文本,再执行writerow/writerows方法。

    补充:除了writerow、writerows,writer对象还提供了其他一些方法:writeheader、dialect

    参考:https://www.cnblogs.com/pyxiaomangshe/p/8026483.html

    read_csv

    官方文档 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

    安装:pip install pandas

    参考:https://www.cnblogs.com/skying555/p/5914391.html

    相关文章

      网友评论

        本文标题:Python文件读写(excel、csv、txt)

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