ag旗舰厅官网_ag旗舰厅下载客户端

热门关键词: ag旗舰厅官网,ag旗舰厅下载客户端

关于计算机

当前位置:ag旗舰厅官网 > 关于计算机 > Python文件操作工具

Python文件操作工具

来源:http://www.pedaLyourcycLe.com 作者:ag旗舰厅官网 时间:2019-10-03 17:08

摘要:

创建一个工作簿


  • 使用openpyxl没有必要先在系统中新建一个.xlsx,我们需要做的只需要引入Workbook这个类,接着开始调用它。

    >>> from openpyxl import Workbook
    >>> wb = Workbook()
    
  • 一个工作簿(workbook)在创建的时候同时至少也新建了一张工作表(worksheet)。你可以通过openpyxl.workbook.Workbook.active()调用得到正在运行的工作表。

    >>> ws = wb.active
    

    注意:该函数调用工作表的索引(_active_sheet_index),默认是0。除非你修改了这个值,否则你使用该函数一直是在对第一张工作表进行操作。

  • 使用openpyxl.workbook.Workbook.create_sheet()新建一张表

    >>> ws1 = wb.create_sheet() #默认插在工作簿末尾
    # or
    >>> ws2 = wb.create_sheet(0) # 插入在工作簿的第一个位置
    
  • 在创建工作表的时候系统自动命名。他们按照序列依次命名 (Sheet, Sheet1, Sheet2, ...)。你可以通过调用下面的属性修改工作表的名称:

    ws.title = "New Title"
    
  • 标签栏的背景色默认为白色。你可以通过提供一个RRGGBB颜色码改变标签栏的字体颜色:

    ws.sheet_properties.tabColor = "1072BA"
    

    图片 1
    修改颜色效果.png

  • 一旦你获取工作表的名字,你可以通过workbook的key或者 openpyxl.workbook.Workbook.get_sheet_by_name() 方法得到该工作表

    >>> ws3 = wb["New Title"]
    >>> ws4 = wb.get_sheet_by_name("New Title")
    >>> ws is ws3 is ws4
    True
    
  • 你可以通过openpyxl.workbook.Workbook.get_sheet_names() 方法得到工作簿的所有工作表。

    >>> print(wb.get_sheet_names())
    ['Sheet2', 'New Title', 'Sheet1']
    

    你也可以循环得到所有的工作表

    >>> for sheet in wb:
                print(sheet.title)
    

Openpyxl是一个常用的python库,用于对Excel的常用格式及其模板进行数据读写等操作。

操作数据


简介与安装openpyxl库

使用一个单元格

现在我们已经知道如何使用一张工作表了,下面我我们开始修改工作表中单元格的内容

  • 单元格可以直接根据他们的索引直接获得

    >>> c = ws['A4']
    

    通过上述的语句,将返回在A4处的单元格,如果不存在将在A4新建一个。 单元格的值也可以直接赋值

    >>> ws['A4'] = 4
    
  • 还提供 openpyxl.worksheet.Worksheet.cell() 方法获取单元格

    >>> c = ws.cell('A4')
    
  • 也可以根据行列值获取单元格

    >>> d = ws.cell(row = 4, column = 2)
    

    注意:当一个工作表被创建是,其中不包含单元格。只有当单元格被获取是才被创建。这种方式我们不会创建我们从不会使用的单元格,从而减少了内存消耗。

警告:由于上述特性,你如果遍历了单元格而非想要使用它们也将会在内存当中创建。比如下面:

>>> for i in range(1,101):
              for j in range(1,101):
                   ws.cell(row = i, column = j)

上述代码将会在内存中创建100*100个单元格。
当然,这里也有方法来清理这些不想要的单元格,在后续我们将会介绍。

Openpyxl is a Python library for reading and writing Excel 2010 xlsx/xlsm/xltx/xltm files.

使用多个单元格
  • 使用切片获取多个单元格

    >>> cell_range = ws['A1':'C2']
    
  • 使用openpyxl.worksheet.Worksheet.iter_rows() 方法获得多个单元格

    >>> tuple(ws.iter_rows('A1:C2'))
    ((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>),
    (<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>))
    >>> for row in ws.iter_rows('A1:C2'):
                for cell in row:
                      print cell
    <Cell Sheet1.A1>
    <Cell Sheet1.B1>
    <Cell Sheet1.C1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B2>
    <Cell Sheet1.C2>
    
  • 如果你需要迭代文件中所有的行或者列,你可以使用openpyxl.worksheet.Worksheet.rows()

    >>> ws = wb.active
    >>> ws['C9'] = 'hello world'
    >>> 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>))
    

    或者使用openpyxl.worksheet.Worksheet.columns()方法

    >>> ws.columns
    ((<Cell Sheet.A1>,
    <Cell Sheet.A2>,
    <Cell Sheet.A3>,
    <Cell Sheet.A4>,
    <Cell Sheet.A5>,
    <Cell Sheet.A6>,
    ...
    <Cell Sheet.B7>,
    <Cell Sheet.B8>,
    <Cell Sheet.B9>),
    (<Cell Sheet.C1>,
    <Cell Sheet.C2>,
    <Cell Sheet.C3>,
    <Cell Sheet.C4>,
    <Cell Sheet.C5>,
    <Cell Sheet.C6>,
    <Cell Sheet.C7>,
    <Cell Sheet.C8>,
    <Cell Sheet.C9>))
    

安装

数据存储
  • 一旦我们有一个openpyxl.cell.Cell,我们可以直接为该单元格赋值

    >>> c.value = 'hello, world'
    >>> print(c.value)
    'hello, world'
    >>> d.value = 3.14
    >>> print(d.value)
    3.14
    
  • 你也可以使用Python中的其他类型和格式

    >>> wb = Workbook(guess_types=True)
    >>> c.value = '12%'
    >>> print(c.value)
    0.12
    >>> import datetime
    >>> d.value = datetime.datetime.now()
    >>> print d.value
    datetime.datetime(2010, 9, 10, 22, 25, 18)
    >>> c.value = '31.50'
    >>> print(c.value)
    31.5
    

pip install openpyxl

保存到文件


  • 保存工作簿最简单最安全的方式是使用openpyxl.workbook.Workbookopenpyxl.workbook.Workbook.save() 方法

    >>> wb = Workbook()
    >>> wb.save('balances.xlsx')
    

    !特别警告:这个操作将会在没有认识提示的情况下用现在写的内容,覆盖掉原文件中的所有内容

  • 你也可以 as_template=True,将文件保存称为一个模板

    >>> wb = load_workbook('document.xlsx')
    >>> wb.save('document_template.xltx', as_template=True)
    
  • 如果as_template=False(默认),则将文件或模板保存为文件

    >>> wb = load_workbook('document_template.xltx')
    >>> wb.save('document.xlsx', as_template=False)
    
    >>> wb = load_workbook('document.xlsx')
    >>> wb.save('new_document.xlsx', as_template=False)
    

    警告:在保存文件到文件模板中的时候你应该监控数据的属性和文件扩展名,反之亦然;否则,你得到的工作簿可能无法打开。
    比如下面的:

    >>> wb = load_workbook('document.xlsx')
    >>> # Need to save with the extension *.xlsx
    >>> wb.save('new_document.xlsm')
    >>> # MS Excel can't open the document
    >>>
    >>> # or
    >>>
    >>> # Need specify attribute keep_vba=True
    >>> wb = load_workbook('document.xlsm')
    >>> wb.save('new_document.xlsm')
    >>> # MS Excel can't open the document
    >>>
    >>> # or
    >>>
    >>> wb = load_workbook('document.xltm', keep_vba=True)
    >>> # If us need template document, then we need specify extension as *.xltm.
    >>> # If us need document, then we need specify attribute as_template=False.
    >>> wb.save('new_document.xlsm', as_template=True)
    >>> # MS Excel can't open the document
    

pillow:在文件中需要使用images (jpeg, png, bmp,...)时,需要安装pillow库。

从文件中导入


  • 和写入文件的方式相同,你可以引入openpyxl.load_workbook()来打开一个已经存在的工作簿

    >>> from openpyxl import load_workbook
    >>> wb2 = load_workbook('test.xlsx')
    >>> print wb2.get_sheet_names()
    ['Sheet2', 'New Title', 'Sheet1']
    
作者:LeeLom
链接:http://www.jianshu.com/p/642456aa93e2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

注意:写操作时请关闭需要操作的excel文件,否则写不成功

加载xlsx操作内容

加载外部excel的xlsx步骤:

加载xlsx文件,获得该文件的句柄,为workbook

from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
print wb2.get_sheet_names()
# ['Sheet2', 'New Title', 'Sheet1']

在内存中新建workbook

创建 workbook

开始使用openpyxl,没有必要在文件系统上创建一个文件。

只需要导入Workbook类并开始使用它。可以把wordbook想象成一个excel文件。

from openpyxl import Workbook
wb = Workbook()
workbook创建后至少至少要创建一个worksheet。使用 openpyxl.workbook.Workbook.active()
ws = wb.active

该方法使用了_active_sheet_index属性, 默认会设置0

创建worksheet

使用 openpyxl.workbook.Workbook.create_sheet() 创建新的worksheet

ws1 = wb.create_sheet("new_sheet_1") # 新建sheet,插入到最后(默认)
ws2 = wb.create_sheet("new_sheet_2", 0) # 插入到最开始的位置

指定worksheet的名称

不指定sheet名称时,按照sheet,sheet1,sheet2自动增长

ws3 = wb.create_sheet()

自定义worksheet名称,通过title属性指定名称,设置了sheet的名称

ws3.title = "new_sheet_3"

输出wb现在所有的sheetname查看

通过 openpyxl.workbook.Workbook.sheetnames()输出wb现在所有的sheetname

print wb.get_sheet_names()
print(wb.sheetnames)

循环

for sheet in wb:
print(sheet.title)

指定worksheet tab按钮的颜色

新建的sheet tab颜色为白色,可以另外指定sheet tab按钮的颜色

ws3.sheet_properties.tabColor = "1072BA"

激活某个worksheet

通过worksheet名称激活某个sheet使用

名称看成workbook中的一个key

ws3 = wb["new_sheet_3"]

通过 _active_sheet_index 激活某个sheet使用

wb._active_sheet_index = 1 # 获取第二个sheet

创建worksheet副本

使用 openpyxl.workbook.Workbook.copy_worksheet() 创建worksheet副本

source = wb.active
target = wb.copy_worksheet(source)

只能复制cell和style。不能复制工作表之间的工作簿。

操作单元格

当worksheet在内存中被创建时,是没有包含cells的,cells是在首次访问时创建

单元格可以看作是worksheet的key,通过key去访问单元格中的数据

c = ws['A3'] # 访问单元格,不存在则会自动创建一个
print c.value
ws['A4'] = 'a4 value' # 指定单元格的值
print ws['A4'].value
d = ws.cell(row=4, column=2, value='通过cell指定') # 通过row column数字指定
print d.value

循环在内存中创建cells

不用指定其值也可以在内存中创建

for i in range(1, 10):
for j in range(1, 10):
ws.cell(row=i, column=j)

通过切片Ranges指定许多cells

cell_range = ws['A1':'C2']

也可以Ranges rows 或者columns

print ws['C']
print ws['C:D']
print ws[10]
print ws[5:10]

也可以使用iter_rows() 指定行->行,截止列

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
for c in row:
print(c)
iter_cols() 指定列->列,截止行
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
for c in row:
print(c)

遍历所有文件的行或列

ws['C9'] = 'hello world'
tuple(ws.rows) # 转化成tuple方便for in操作
tuple(ws.columns)

保存文件

wb = Workbook()
wb.save("assets/sample.xlsx")

此操作将覆盖现有的文件没有警告。

所有的操作都需要保存到excel才能看见

保存为模板

指定属性 as_template=True ,就可以将文档保存为模板.xltx

wb = load_workbook('document.xlsx')
wb.template = True
wb.save('document_template.xltx')

或者将该属性设置为False(默认),另存为一个文档:

wb = load_workbook('document_template.xltx')
wb.template = False
wb.save('document.xlsx', as_template=False)

使用公式

wb = load_workbook('assets/sample.xlsx')
ws = wb.active
ws["A5"] = "=SUM(2, 1)"
wb.save("assets/sample.xlsx")

本文由ag旗舰厅官网发布于关于计算机,转载请注明出处:Python文件操作工具

关键词: