os模塊用法大全
os.listdir(dirname):列出dirname下的目錄和文件
os.getcwd():獲得當(dāng)前工作目錄
os.chdir(dirname):改變工作目錄到dirname
os.path.realpath(path):返回path的真實(shí)路徑
os.getcwd:得到當(dāng)前工作目錄,即當(dāng)前python腳本工作的目錄路徑。
os.mkdir(name):創(chuàng)建目錄
os.rmdir(name):刪除目錄
os.path.isfile()檢驗(yàn)給出的路徑是一個(gè)文件
os.path.isdir() 檢驗(yàn)給出的路徑是一個(gè)目錄
os.listdir():返回指定目錄下的所有文件和目錄名
os.remove(file):刪除一個(gè)文件
os.path.join(path,name):路徑拼接
os.path.split():返回一個(gè)路徑的目錄名和文件名
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路徑
os.stat(file):獲得文件屬性
os.removedirs(“c:\musne”):刪除多個(gè)目錄
os.path.existe():檢驗(yàn)給出的路徑是否真的存在
os.curdir():返回當(dāng)前目錄('.')
os.chmod(file):修改文件權(quán)限和時(shí)間戳
os.path.exists(name):判斷是否存在文件或目錄name
os.path.getsize(name):或得文件大小,如果name是目錄返回0L
os.path.abspath(name):獲得絕對(duì)路徑
os.path.isabs():判斷是否為絕對(duì)路徑
os.path.normpath(path):規(guī)范path字符串形式
os.path.splitext():分離文件名和擴(kuò)展名
os.name():指示你正在使用的工作平臺(tái)。比如對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶(hù),它是'posix'。徑
os.linesep():給出當(dāng)前平臺(tái)的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
os.sep():取代操作系統(tǒng)特定的路徑分隔符
os.system():運(yùn)行shell命令
os.exit():終止當(dāng)前進(jìn)程
os.getenv():讀取環(huán)境變量
os.putenv:設(shè)置環(huán)境變量
pandas模塊的使用方法
import pandas as pd
Python中pandas模塊的講解
Python運(yùn)用于數(shù)據(jù)分析的簡(jiǎn)單教程: http://www.jb51.net/article/62982.htm
read_csv()
讀寫(xiě)csv數(shù)據(jù)
df = pd.read_csv(path): 讀入csv文件,形成一個(gè)數(shù)據(jù)框(data.frame)
df = pd.read_csv(path, header=None) 不要把第一行作為header
to_csv()
* 注意,默認(rèn)會(huì)將第一行作為header,并且默認(rèn)會(huì)添加index,所以不需要的話需要手動(dòng)禁用 *
df.to_csv(path, header=False, index=False)
數(shù)據(jù)框操作
df.head(1) 讀取頭幾條數(shù)據(jù)
df.tail(1) 讀取后幾條數(shù)據(jù)
df[‘date’] 獲取數(shù)據(jù)框的date列
df.head(1)[‘date’] 獲取第一行的date列
df.head(1)[‘date’][0] 獲取第一行的date列的元素值
sum(df[‘a(chǎn)bility’]) 計(jì)算整個(gè)列的和
df[df[‘date’] == ‘20161111’] 獲取符合這個(gè)條件的行
df[df[‘date’] == ‘20161111’].index[0] 獲取符合這個(gè)條件的行的行索引的值
df.iloc[1] 獲取第二行
df.iloc[1][‘test2’] 獲取第二行的test2值
10 mins to pandas?
df.index 獲取行的索引
df.index[0] 獲取第一個(gè)行索引
df.index[-1] 獲取最后一個(gè)行索引,只是獲取索引值
df.columns 獲取列標(biāo)簽
df[0:2] 獲取第1到第2行,從0開(kāi)始,不包含末端
df.loc[1] 獲取第二行
df.loc[:,’test1’] 獲取test1的那一列,這個(gè)冒號(hào)的意思是所有行,逗號(hào)表示行與列的區(qū)分
df.loc[:,[‘test1’,’test2’]] 獲取test1列和test2列的數(shù)據(jù)
df.loc[1,[‘test1’,’test2’]] 獲取第二行的test1和test2列的數(shù)據(jù)
df.at[1,’test1’] 表示取第二行,test1列的數(shù)據(jù),和上面的方法類(lèi)似
df.iloc[0] 獲取第一行
df.iloc[0:2,0:2] 獲取前兩行前兩列的數(shù)據(jù)
df.iloc[[1,2,4],[0,2]] 獲取第1,2,4行中的0,2列的數(shù)據(jù)
(df[2] > 1).any() 對(duì)于Series應(yīng)用any()方法來(lái)判斷是否有符合條件的
stat模塊的使用方法
>>>import os>>>printos.stat("/root/python/zip.py")
(33188, 2033080, 26626L, 1, 0, 0, 864, 1297653596, 1275528102, 1292892895)>>>printos.stat("/root/python/zip.py").st_mode#權(quán)限模式33188>>>printos.stat("/root/python/zip.py").st_ino#inode number2033080>>>printos.stat("/root/python/zip.py").st_dev#device26626>>>printos.stat("/root/python/zip.py").st_nlink#number of hard links1>>>printos.stat("/root/python/zip.py").st_uid#所有用戶(hù)的user id0>>>printos.stat("/root/python/zip.py").st_gid#所有用戶(hù)的group id0>>>printos.stat("/root/python/zip.py").st_size#文件的大小,以位為單位864>>>printos.stat("/root/python/zip.py").st_atime#文件最后訪問(wèn)時(shí)間1297653596>>>printos.stat("/root/python/zip.py").st_mtime#文件最后修改時(shí)間1275528102>>>printos.stat("/root/python/zip.py").st_ctime#文件創(chuàng)建時(shí)間1292892895
描述os.stat()返回的文件屬性列表中各值的意義
fileStats?=?os.stat(path) 獲取到的文件屬性列表
fileStats[stat.ST_MODE] 獲取文件的模式
fileStats[stat.ST_SIZE] 文件大小
fileStats[stat.ST_MTIME] 文件最后修改時(shí)間
fileStats[stat.ST_ATIME] 文件最后訪問(wèn)時(shí)間
fileStats[stat.ST_CTIME] 文件創(chuàng)建時(shí)間
stat.S_ISDIR(fileStats[stat.ST_MODE]) 是否目錄
stat.S_ISREG(fileStats[stat.ST_MODE]) 是否一般文件
stat.S_ISLNK(fileStats[stat.ST_MODE]) 是否連接文件
stat.S_ISSOCK(fileStats[stat.ST_MODE]) 是否COCK文件
stat.S_ISFIFO(fileStats[stat.ST_MODE]) 是否命名管道
stat.S_ISBLK(fileStats[stat.ST_MODE]) 是否塊設(shè)備
stat.S_ISCHR(fileStats[stat.ST_MODE]) 是否字符設(shè)置
openpyxl模塊(最全總結(jié) 足夠初次使用)
1. 安裝
pip install openpyxl
2. 打開(kāi)文件
① 創(chuàng)建
from? openpyxl import? Workbook
# 實(shí)例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
② 打開(kāi)已有
>>> from openpyxl? import load_workbook
>>> wb2 = load_workbook('文件名稱(chēng).xlsx')
3. 儲(chǔ)存數(shù)據(jù)
復(fù)制代碼
# 方式一:數(shù)據(jù)可以直接分配到單元格中(可以輸入公式)
ws['A1'] = 42
# 方式二:可以附加行,從第一列開(kāi)始附加(從最下方空白處,最左開(kāi)始)(可以輸入多行)
ws.append([1, 2, 3])
# 方式三:Python 類(lèi)型會(huì)被自動(dòng)轉(zhuǎn)換
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
復(fù)制代碼
4. 創(chuàng)建表(sheet)
# 方式一:插入到最后(default)
>>> ws1 = wb.create_sheet("Mysheet")
# 方式二:插入到最開(kāi)始的位置
>>> ws2 = wb.create_sheet("Mysheet", 0)
5. 選擇表(sheet)
# sheet 名稱(chēng)可以作為 key 進(jìn)行索引
>>> ws3 = wb["New Title"]
>>> ws4 = wb.get_sheet_by_name("New Title")
>>> ws is ws3 is ws4
True
6. 查看表名(sheet)
復(fù)制代碼
# 顯示所有表名
>>> print(wb.sheetnames)
['Sheet2', 'New Title',? 'Sheet1']
# 遍歷所有表
>>> for sheet in? wb:
...? ? print(sheet.title)
復(fù)制代碼
7. 訪問(wèn)單元格(call)
① 單一單元格訪問(wèn)
復(fù)制代碼
# 方法一
>>> c = ws['A4']
# 方法二:row 行;column 列
>>> d = ws.cell(row=4, column=2, value=10)
# 方法三:只要訪問(wèn)就創(chuàng)建
>>> for i in? range(1,101):
...? ? ? ? for j in range(1,101):
...? ? ? ? ? ? ws.cell(row=i, column=j)
復(fù)制代碼
② 多單元格訪問(wèn)
復(fù)制代碼
# 通過(guò)切片
>>> cell_range = ws['A1':'C2']
# 通過(guò)行(列)
>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]
# 通過(guò)指定范圍(行 → 行)
>>> 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>
# 通過(guò)指定范圍(列 → 列)
>>> 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>
# 遍歷所有 方法一
>>> 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.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
# 遍歷所有 方法二
>>> tuple(ws.columns)
((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,
...
<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<Cell Sheet.C1>,
...
<Cell Sheet.C8>,
<Cell Sheet.C9>))
復(fù)制代碼
8. 保存數(shù)據(jù)
>>> wb.save('文件名稱(chēng).xlsx')
9. 其他
① 改變 sheet 標(biāo)簽按鈕顏色
ws.sheet_properties.tabColor = "1072BA"
② 獲取最大行,最大列
# 獲得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)
③ 獲取每一行,每一列
sheet.rows為生成器, 里面是每一行的數(shù)據(jù),每一行又由一個(gè)tuple包裹。
sheet.columns類(lèi)似,不過(guò)里面是每個(gè)tuple是每一列的單元格。
復(fù)制代碼
# 因?yàn)榘葱?,所以返回A1, B1, C1這樣的順序
for row in sheet.rows:
? ? for cell in row:
? ? ? ? print(cell.value)
# A1, A2, A3這樣的順序
for column in sheet.columns:
? ? for cell in column:
? ? ? ? print(cell.value)
復(fù)制代碼
④ 根據(jù)數(shù)字得到字母,根據(jù)字母得到數(shù)字
復(fù)制代碼
from openpyxl.utils import get_column_letter, column_index_from_string
# 根據(jù)列的數(shù)字返回字母
print(get_column_letter(2))? # B
# 根據(jù)字母返回列的數(shù)字
print(column_index_from_string('D'))? # 4
復(fù)制代碼
⑤ 刪除工作表
# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]
⑥ 矩陣置換(行 → 列)
復(fù)制代碼
rows = [
? ? ['Number', 'data1', 'data2'],
? ? [2, 40, 30],
? ? [3, 40, 25],
? ? [4, 50, 30],
? ? [5, 30, 10],
? ? [6, 25, 5],
? ? [7, 50, 10]]
list(zip(*rows))
# out
[('Number', 2, 3, 4, 5, 6, 7),
('data1', 40, 40, 50, 30, 25, 50),
('data2', 30, 25, 30, 10, 5, 10)]
# 注意 方法會(huì)舍棄缺少數(shù)據(jù)的列(行)
rows = [
? ? ['Number', 'data1', 'data2'],
? ? [2, 40? ? ? ],? ? # 這里少一個(gè)數(shù)據(jù)
? ? [3, 40, 25],
? ? [4, 50, 30],
? ? [5, 30, 10],
? ? [6, 25, 5],
? ? [7, 50, 10],
]
# out
[('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50)]
復(fù)制代碼
10. 設(shè)置單元格風(fēng)格
① 需要導(dǎo)入的類(lèi)
from openpyxl.styles import Font, colors, Alignment
② 字體
下面的代碼指定了等線24號(hào),加粗斜體,字體顏色紅色。直接使用cell的font屬性,將Font對(duì)象賦值給它。
bold_itatic_24_font = Font(name='等線', size=24, italic=True, color=colors.RED, bold=True)
sheet['A1'].font = bold_itatic_24_font
③ 對(duì)齊方式
也是直接使用cell的屬性aligment,這里指定垂直居中和水平居中。除了center,還可以使用right、left等等參數(shù)
# 設(shè)置B1中的數(shù)據(jù)垂直居中和水平居中
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')
④ 設(shè)置行高和列寬
# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列寬
sheet.column_dimensions['C'].width = 30
⑤ 合并和拆分單元格
所謂合并單元格,即以合并區(qū)域的左上角的那個(gè)單元格為基準(zhǔn),覆蓋其他單元格使之稱(chēng)為一個(gè)大的單元格。
相反,拆分單元格后將這個(gè)大單元格的值返回到原來(lái)的左上角位置。
# 合并單元格, 往左上角寫(xiě)入數(shù)據(jù)即可
sheet.merge_cells('B1:G1') # 合并一行中的幾個(gè)單元格
sheet.merge_cells('A1:C3') # 合并一個(gè)矩形區(qū)域中的單元格
合并后只可以往左上角寫(xiě)入數(shù)據(jù),也就是區(qū)間中:左邊的坐標(biāo)。
如果這些要合并的單元格都有數(shù)據(jù),只會(huì)保留左上角的數(shù)據(jù),其他則丟棄。換句話說(shuō)若合并前不是在左上角寫(xiě)入數(shù)據(jù),合并后單元格中不會(huì)有數(shù)據(jù)。
以下是拆分單元格的代碼。拆分后,值回到A1位置
sheet.unmerge_cells('A1:C3')
最后舉個(gè)例子
復(fù)制代碼
import datetime
from random import choice
from time import time
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 設(shè)置文件 mingc
addr = "openpyxl.xlsx"
# 打開(kāi)文件
wb = load_workbook(addr)
# 創(chuàng)建一張新表
ws = wb.create_sheet()
# 第一行輸入
ws.append(['TIME', 'TITLE', 'A-Z'])
# 輸入內(nèi)容(500行數(shù)據(jù))
for i in range(500):
? ? TIME = datetime.datetime.now().strftime("%H:%M:%S")
? ? TITLE = str(time())
? ? A_Z = get_column_letter(choice(range(1, 50)))
? ? ws.append([TIME, TITLE, A_Z])
# 獲取最大行
row_max = ws.max_row
# 獲取最大列
con_max = ws.max_column
# 把上面寫(xiě)入內(nèi)容打印在控制臺(tái)
for j in ws.rows:? ? # we.rows 獲取每一行數(shù)據(jù)
? ? for n in j:
? ? ? ? print(n.value, end="\t")? # n.value 獲取單元格的值
? ? print()
# 保存,save(必須要寫(xiě)文件名(絕對(duì)地址)默認(rèn) py 同級(jí)目錄下,只支持 xlsx 格式)
wb.save(addr)
復(fù)制代碼
分類(lèi): python模塊