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)
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
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']
查找 df
中 row2
行和 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:
dataDict = json.load(jsonFile) json.dump(dataDict, jsonFile, ensure_ascii=False, indent=4)
|