Sherroe's Blog

关于工作中常用的一些操作文件的Python库

字数统计: 779阅读时长: 3 min
2025/01/31

excel

openpyxl

最常用的操作excel(xlsx、xlsm)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from openpyxl import load_workbook

# 加载文件
wb = load_workbook( _filePath,read_only=True,data_only=True,keep_vba=True,keep_links=True)
# 取第一个工作表
ws = wb[wb.sheetnames[0]]

# 获取工作簿的所有页签名
sheetNameList = wb.sheetnames

# 通过页签名取出工作表
ws = wb['Sheet0']
ws = wb[sheetNameList[0]]

# 获取激活工作表
ws = wb.active

# 获取工作表数据
data = ws.values

# 将数据转换为元组以更快读取
data = tuple(ws.values)

# 向指定行列号的单元格中写入数据
# row,col 都是从1开始
ws.cell(row, col).value = "010"

# 保存并关闭
wb.save(_filePath)
wb.close()

xlwings

写文件时比openpyxl更稳定一点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import xlwings as xw

app = xw.App(visible=False, add_book=False)
# 警告关闭
app.display_alerts = False
# 屏幕更新关闭
app.screen_updating = False
# 加载文件
wb = app.books.open(_filePath)

# 根据顺序取出工作表
ws = wb.sheets[0]
# 根据页签名取出工作表
ws = wb.sheets['Sheet1']

# 取出范围内的数据
data = tuple(ws.range('A1').expand().value)

# 最大行列号
maxcol = ws.used_range.last_cell.column

# 向单元格写入内容(行列号从1开始)
ws.cells(row, col).value = '010'

# 范围
ws.range((row2, col2),(row2, col2)).value = '101'

# 复制单元格
ws[row:row+5, wcol-1:wcol].copy(ws2[0:4, chcol-1:chcol])

# 插入行列
ws.api.Columns(col+1).Insert()

# 设置颜色
changesh.range((1,chcol), (inmaxcrow,chcol)).color = (200, 200, 200)

# 保存关闭
wb.save(_filePath)
wb.close()

pandas

功能强大,dataframe结构自带行索引、列索引,切片、插入、拼接等操作也很方便。但是效率很低,只适合处理少量复杂数据。

1
2
3
import pandas as pd

df = pd.read_csv(csvpath, skiprows=[0,1,4,5], engine='c', na_filter=False, keep_default_na=False)
  • 使用 loc[]
    • df.loc['row2', 'B'] 查找 dfrow2 行和 B 列的值。
    • loc 使用的是行标签 'row2' 和列标签 'B' 来查找。
  • 使用 iloc[]
    • df.iloc[1, 1] 查找 df 中第 1 行(索引从 0 开始,即第二行)和第 1 列(索引从 0 开始,即第二列)的值。
    • iloc 使用的是基于整数的位置索引 1, 1 来查找。
  • 行索引(行标签):默认情况下,pandas 会自动为 DataFrame 添加行索引(行标签)。这个行索引是从 0 开始的整数序列。例如,如果有 5 行数据,那么行索引就是 [0, 1, 2, 3, 4]
  • 在read时添加 index_col=0 让第0列的数据作为索引
  • 列索引(列标签):默认情况下,pandas 会使用 CSV 文件的第一行作为列标签。第一行中的每个值将成为 DataFrame 的列名称。

csv

1
2
with open(_filePath, mode='r', encoding='UTF-8-SIG', newline='') as csvfile:
reader = csv.reader(csvfile)

luadata

write

写文件

1
2
3
import luadata

luadata.write(path, data, encoding="utf-8", indent="\\t", prefix="return ")

read

读文件

1
2
3
import luadata

data = luadata.read(path, encoding="utf-8")

serialize

把字典序列化为字符串

1
2
3
import luadata

luadata.serialize(var, encoding="utf-8", indent="\\t", indent_level=0)

unserialize

把字符串反序列化为字典

1
2
3
import luadata

luadata.unserialize(luadata_str, encoding="utf-8", multival=False)

json

1
2
3
4
5
6
7
8
9
import json

with open(jsonPath,'r',encoding='utf-8-sig') as jsonFile:

# 从json中读数据到字典
dataDict = json.load(jsonFile)

# 将字典写入json
json.dump(dataDict, jsonFile, ensure_ascii=False, indent=4)
CATALOG
  1. 1. excel
    1. 1.1. openpyxl
    2. 1.2. xlwings
    3. 1.3. pandas
  2. 2. csv
  3. 3. luadata
    1. 3.0.1. write
    2. 3.0.2. read
    3. 3.0.3. serialize
    4. 3.0.4. unserialize
  • 4. json