文章目錄
- 1.python中文件的管理
- 2.python中的OS模塊
- 2.1 返回操作系統的類型
- 2.2 返回操作系統的詳細信息
- 2.3 返回系統的環境變量
- 2.4 檢測/生成絕對路徑
- 2.5 分離目錄名和文件名
- 2.6 刪除/創建目錄
- 2.7 創建/刪除文件
- 2.8 重命名
- 2.9 判斷文件/目錄是否存在
- 2.10 分離文件名和後綴名
- 3.Python中對目錄的操作
- 4.Python中對時間的管理
- 5.Python中的第三方模塊
1.python中文件的管理
1.1讀取文件
1 打開文件的三個步驟
open -> operate -> close
注意:打開文件後一定要關閉文件,否則會佔用系統資源
f = open('/etc/passwd')
content = f.read()
print(content)
f.close()
2 查看文件的讀寫權限
注意:默認的權限是r(只能讀,不能寫)
f = open('/mnt/passwd')
print(f.readable())
print(f.writable())
f.close()
3 文件讀取的四個模式
r:(默認)
-只能讀,不能寫
-讀取的文件不存在,會報錯
FileNotFoundError: [Errno 2] No such file or directory
r+:
-可以執行讀寫操作
-文件不存在,報錯
-默認情況下,從文件指針所在位置開始寫入
w:
-write only
-會清空文件之前的內容
-文件不存在,不會報錯,會創建新的文件並寫入
w+:
-rw
-會清空文件內容
-文件不存在,不報錯,會創建新的文件
a:
-write only
-不會清空文件內容
-文件不存在,會報錯
a+:
-rw
-文件不存在,不報錯
-不會清空文件內容
1.2文件指針
1 查看文件指針所處於的位置
注意:文件的讀取從指針後讀取
f = open('/mnt/passwd','r+')
print(f.tell())
f.write('python')
print(f.tell())
content = f.read()
print(content)
print(f.tell())
print(f.read())
print(f.tell())
f.close()
2 指針的操作(seek方法)
seek方法,移動指針
seek第一個參數是偏移量:>0,代表向右移動,<0,代表向左移動
seek第二個參數是:
0:移動指針到文件開頭
1:不移動指針
2:移動指針到末尾
注意: 第一個參數 受限於第二個參數
f = open('/tmp/passwd','rb')
print(f.read())
print(f.tell())
f.seek(0)
print(f.tell())
print(f.read(3))
print(f.tell())
f.seek(-1,2)
print(f.tell())
f.close()
1.3 文件的讀取操作
1 read方法
read讀取整個文件,將文件內容放到一個字符串變量中。
注意:如果文件非常大,尤其是大於內存時,無法使用read()方法。
f = open('/mnt/passwd','rb')
print(f.read())
f.close()
f = open('/mnt/passwd','rb')
print(f.read(4))
f.close()
2 readline方法
readline()方法每次讀取一行;返回的是一個字符串對象,保持當前行的內存,但比readlines慢得多
f = open('/mnt/passwd','rb')
print(f.readline())
f.close()
3 readlines方法
readlines()方法一次性讀取整個文件;自動將文件內容分析成一個行的列表。
f = open('/mnt/passwd','rb')
print(f.readlines())
f.close()
1.4 圖片的讀取操作
對於非文件的讀取方式可以通過複製操作來讀取。
f1 = open('redhat.jpg',mode='rb')
content = f1.read()
f1.close()
f2 = open('copypic.jpg',mode='wb')
f2.write(content)
f2.close()
1.5 文件管理中的with
用with的方法打開文件不需要再用close關閉
with open('/tmp/passwd') as f:
print(f.read())
1 with和close的區別
2 with同時打開2個文件
在python3中
with open('/tmp/passwd') as f1,\
open('/tmp/copypasswd','w+') as f2:
f2.write(f1.read())
f2.seek(0)
print(f2.read())
在python2中
with open('/tmp/passwd') as f1:
content = f1.read()
with open('/tmp/passwd2') as f2:
f2.write(content)
print(f2.read())
在python2中要分開寫
1.6 文件管理的練習
創建文件data.txt,文件共100000行,每行存放一個1~100之間的整數
import random
f = open('date.txt','w+')
for i in range(100000):
f.write(str(random.randint(1,100))+'\n')
f.seek(0)
print(f.read())
f.close()
2.python中的OS模塊
注意:需要導入os
import os
2.1 返回操作系統的類型
返回的值爲posix爲Linux的操作系統
返回的值爲nt爲Windows的操作系統
import os
print(os.name)
2.2 返回操作系統的詳細信息
import os
info = os.uname()
print(info)
print(info.sysname)
print(info.nodename)
2.3 返回系統的環境變量
import os
print(os.environ)
print(os.environ.get('PATH'))
2.4 檢測/生成絕對路徑
1.判斷是否爲絕對路徑
注意:不判斷文件是否存在,只判斷是否以/開頭
import os
print(os.path.isabs('/tmp/python'))
print(os.path.isabs('python'))
2.生成絕對路徑
import os
from os.path import join
print(os.path.abspath('copypic.jpg'))
print(os.path.join(os.path.abspath('.'),'copypic.jpg'))
print(os.path.join('/home/rhel8','copypic.jpg'))
2.5 分離目錄名和文件名
根據絕對路徑獲取目錄名/文件名
import os
from os.path import join
print(os.path.join('/home/rhel8','hello.jpg'))
print(os.path.basename('/home/rhel8/hello.jpg'))
print(os.path.dirname('/home/rhel8/hello.jpg'))
分離目錄名和文件名
import os
from os.path import split
print(os.path.split('/tmp/file.txt'))
2.6 刪除/創建目錄
1.創建目錄
import os
os.mkdir('filedir')
2.創建遞歸目錄
import os
os.makedirs('dir/dir1')
3.刪除目錄
注意:只能刪除空目錄
import os
os.rmdir('filedir')
2.7 創建/刪除文件
創建文件
import os
os.mknod('file.txt')
刪除文件
import os
os.remove('file.txt')
2.8 重命名
import os
os.rename('date.txt','file.txt')
2.9 判斷文件/目錄是否存在
import os
from os.path import exists
print(os.path.exists('file.txt'))
print(os.path.exists('file1'))
2.10 分離文件名和後綴名
import os
from os.path import splitext
print(os.path.splitext('file.txt'))
3.Python中對目錄的操作
3.1 查看目錄下的路徑
import os
for root,dir,files in os.walk('/var/log'):
print(root)
3.2 查看目錄下路徑中包含的目錄文件
import os
for root,dir,files in os.walk('/var/log'):
print(dir)
3.3 查看目錄下路徑中包含的文件
import os
for root,dir,files in os.walk('/var/log'):
print(files)
3.4 拼接目錄和文件
import os
from os.path import join
for root,dir,files in os.walk('/var/log'):
# print(root)
# print(dir)
# print(files)
for name in files:
print(join(root,name))
3.5 練習
1. 生成一個大文件ips.txt,要求1200行, 每行隨機爲172.25.254.0/24段的ip;讀取ips.txt文件統計這個文件中ip出現頻率排前10的ip;
import random
def creat_ip_file(filename):
ip = ['172.25.254.' + str(i) for i in range(1,255)]
with open(filename,'a+') as f:
for i in range(1200):
f.write(random.sample(ip,1)[0] + '\n')
def sorted_ip_file(filename,count=10):
ips_dict = dict()
with open(filename) as f:
for ip in f:
ip = ip.strip()
if ip in ips_dict:
ips_dict[ip] += 1
else:
ips_dict[ip] = 1
sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse=True)[:10]
return sorted_ip
print(sorted_ip_file('ips.txt'))
練習:在當前目錄新建目錄img, 裏面包含100個文件, 100個文件名各不相同(X4G5.png); 將當前img目錄所有以.png結尾的後綴名改爲.jpg.
import random
import string
import os
def gen_code(len=4):
li = random.sample(string.ascii_letters+string.digits,len)
return ''.join(li )
def create_file():
li = [gen_code() for i in range(100)]
os.mkdir('img')
for i in li:
os.mknod('img/' + i + '.png')
def modify_suffix(dirname,old_suffix,new_suffix):
pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))
basefiles = [os.path.splitext(filename)[0] for filename in pngfile]
for filename in basefiles:
oldname = os.path.join(dirname,filename + old_suffix)
newname = os.path.join(dirname,filename +new_suffix)
os.rename(oldname,newname)
modify_suffix('img','.png','.jpg')
練習:生成100個MAC地址並寫入文件中,MAC地址前6位(16進制)爲01-AF-3B
01-AF-3B
01-AF-3B-xx
01-AF-3B-xx-xx
01-AF-3B-xx-xx-xx
import random
import string
def create_mac():
MAC = '01-AF-3B'
hex_num = string.hexdigits
for i in range(3):
n = random.sample(hex_num,2)
sn = '-' + ''.join(n).upper()
MAC += sn
return MAC
def main():
with open('mac.txt','w') as f:
for i in range(100):
mac = create_mac()
print(mac)
f.write(mac + '\n')
main()
4.Python中對時間的管理
4.1 time.time()
time.time()可以計算兩個時間的間隔
4.2 獲取文件的atime,ctime,mtime
import time
import os
time1 = os.path.getctime('/etc/passwd')
print(time1)
tuple_time = time.localtime(time1)
print(tuple_time)
year = tuple_time.tm_year
month = tuple_time.tm_mon
day = tuple_time.tm_mday
with open('time.txt','w') as f:
f.write('%d %d %d' %(year,month,day))
f.write('\n')
4.3 時間之間的格式轉換
1.把元組時間轉換爲時間戳
import time
tuple_time = time.localtime()
print(tuple_time)
print(time.mktime(tuple_time))
2.把元組時間轉換爲字符串
import time
tuple_time = time.localtime()
print(time.strftime('%m-%d',tuple_time))
print(time.strftime('%Y-%m-%d',tuple_time))
print(time.strftime('%F',tuple_time))
print(time.strftime('%T',tuple_time))
3.把時間戳轉換爲字符串
import time
import os
time1 = os.path.getctime('/etc/passwd')
print(time1)
print(time.ctime(time1))
4.把時間戳轉換爲元組時間
import time
import os
time1 = os.path.getctime('/etc/passwd')
print(time1)
print(time.localtime(time1))
4.4 練習
練習: 獲取當前主機信息, 包含操作系統名, 主機名,內核版本, 硬件架構等;獲取開機時間和開機時長;獲取當前登陸用戶
import os
import psutil
from datetime import datetime
print('主機信息'.center(50,'*'))
info = os.uname()
print(
"""
操作系統:%s
主機名稱:%s
內核版本:%s
硬件架構:%s
"""%(info.sysname,info.nodename,info.release,info.machine)
)
print('開機信息'.center(50,'*'))
boot_time = psutil.boot_time()
boot_time_obj = datetime.fromtimestamp(boot_time)
print('開機時間爲:',boot_time_obj)
now_time = datetime.now()
print('當前時間爲:',str(now_time).split('.')[0])
time1 = now_time - boot_time_obj
print('開機時長爲:',str(time1).split('.')[0])
print('當前登陸用戶'.center(50,'*'))
login_user = psutil.users()
print(login_user[0].name)
5.Python中的第三方模塊
5.1 itchat(與微信交互)
1.發微信給文件助手
import itchat
import time
import random
itchat.auto_login()##登錄微信
while True:
itchat.send('hello',toUserName='filehelper')
time.sleep(random.randint(1,3))
2.統計微信好友性別
import itchat
import time
import random
itchat.auto_login()
friends = itchat.get_friends()
info = {}
for friend in friends[1:]:
if friend['Sex'] == 1:
info['male'] = info.get('male',0) + 1
elif friend['Sex'] == 2:
info['female'] = info.get('female',0) + 1
else:
info['other'] = info.get('other',0) + 1
print(info)