1、遍歷目錄及文件方法
1)根據時間遍歷指定目錄下的文件
[root@04 b2c]# cat file_list.py
#!/usr/bin/env python
# coding: utf-8
import os
def get_file_list(file_path):
dir_list = os.listdir(file_path)
if not dir_list:
return
else:
# 注意,這里使用lambda表達式,將文件按照最后修改時間順序升序排列
# os.path.getmtime() 函數是獲取文件最后修改時間
# os.path.getctime() 函數是獲取文件最后創建時間
dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
# print(dir_list)
return dir_list
print get_file_list('/logarchive/b2c')
執行
[root@04 b2c]# python file_list.py
['2019-05-29.log', '2019-05-30.log', 'b2c_input.py', '2019-05-31.log', '2019-06-01.log', '2019-06-02.log', '2019-06-03.log', '2019-06-04.log', '2019-06-05.log', '2019-06-06.log', '2019-06-07.log', '2019-06-08.log', '2019-06-09.log', '2019-06-10.log', '2019-06-11.log', '2019-06-12.log', '2019-06-13.log', '2019-06-14.log', '2019-06-15.log', '2019-06-16.log', '2019-06-17.log', '2019-06-18.log', '2019-06-19.log', '2019-06-20.log', '2019-06-21.log', '2019-06-22.log', '2019-06-23.log', '2019-06-24.log', 'file.py', 'file_list.py']
2)如果過濾以log為結尾的文件
方法一:
[root@04 b2c]# cat file_list.py
#!/usr/bin/env python
# coding: utf-8
import os
def get_file_list(file_path):
dir_list = os.listdir(file_path)
if not dir_list:
return
else:
# 注意,這里使用lambda表達式,將文件按照最后修改時間順序升序排列
# os.path.getmtime() 函數是獲取文件最后修改時間
# os.path.getctime() 函數是獲取文件最后創建時間
dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
for filename in dir_list:
if filename.endswith(".log"):
print filename
get_file_list('/logarchive/b2c')
[root@app04 b2c]# python file_list.py
2019-05-29.log
2019-05-30.log
2019-05-31.log
2019-06-01.log
2019-06-02.log
2019-06-03.log
2019-06-04.log
2019-06-05.log
2019-06-06.log
2019-06-07.log
2019-06-08.log
2019-06-09.log
2019-06-10.log
2019-06-11.log
2019-06-12.log
2019-06-13.log
2019-06-14.log
2019-06-15.log
2019-06-16.log
2019-06-17.log
2019-06-18.log
2019-06-19.log
2019-06-20.log
2019-06-21.log
2019-06-22.log
2019-06-23.log
2019-06-24.log
方法二:
#!/usr/bin/env python
# coding: utf-8
import os, glob, time
# 定義要清理文件的目錄
root = '/logarchive/b2c'
_list = []
for folder in glob.glob(root):
for _log_name in glob.glob(folder + '/*.log'):
_list.append(_log_name)
filelist = sorted(_list)
for log_name in filelist:
print log_name
f = open(log_name, 'r')
content = f.readlines()
f.close()
_time = []
for item in content:
time = int(item.strip().split('>>>')[-1].split('ms')[0])
_time.append(time)
access_time = sorted(_time)
print("b2c 運價訪問時間:")
print("min: %s ms"% access_time[0])
print("max: %s ms"% access_time[-1])
sum = 0
access_count = len(_time)
for i in _time:
sum += i
avg = sum/access_count
print("avg: %s ms" % avg)
print '-'*50
print filelist
方法1:
import glob
import os
os.chdir(“./”)
for file in glob.glob(“*.py”):
print file
方法2:
for file in os.listdir(“./”):
if file.endswith(“.py”):
print file
方法3:
for root, dirs, files in os.walk(“./”):
for file in files:
if file.endswith(“.py”):
print os.path.join(root, file)
4) os.walk()方法
import os
def all_path(dirname):
result = []#所有的文件
for maindir, subdir, file_name_list in os.walk(dirname):
print("1:",maindir) #當前主目錄
print("2:",subdir) #當前主目錄下的所有目錄
print("3:",file_name_list) #當前主目錄下的所有文件
for filename in file_name_list:
apath = os.path.join(maindir, filename)#合並成一個完整路徑
result.append(apath)
return result
print(all_path("E:\myTest"))
5) python遍歷目錄下的所有文件和目錄
目錄結構如下圖:
test---a------d------g--------g.txt
test---a------d------a.txt
test---a------e
--------b
--------c
--------1.txt
--------2.txt
一、使用os.walk遍歷所有的目錄和文件
1、獲取test目錄下的所有文件
for root,dirs,files in os.walk(r"D:\test"):
for file in files:
#獲取文件所屬目錄
print(root)
#獲取文件路徑
print(os.path.join(root,file))

2、獲取test目錄下的所有目錄
for root,dirs,files in os.walk(r"D:\test"):
for dir in dirs:
#獲取目錄的名稱
print(dir)
#獲取目錄的路徑
print(os.path.join(root,dir))

二、利用os.listdir遞歸獲取所有的目錄路徑和文件路徑
def get_file_path(root_path,file_list,dir_list):
#獲取該目錄下所有的文件名稱和目錄名稱
dir_or_files = os.listdir(root_path)
for dir_file in dir_or_files:
#獲取目錄或者文件的路徑
dir_file_path = os.path.join(root_path,dir_file)
#判斷該路徑為文件還是路徑
if os.path.isdir(dir_file_path):
dir_list.append(dir_file_path)
#遞歸獲取所有文件和目錄的路徑
get_file_path(dir_file_path,file_list,dir_list)
else:
file_list.append(dir_file_path)
if __name__ == "__main__":
#根目錄路徑
root_path = r"D:\test"
#用來存放所有的文件路徑
file_list = []
#用來存放所有的目錄路徑
dir_list = []
get_file_path(root_path,file_list,dir_list)
print(file_list)
print(dir_list)

轉自
python 過濾出某后綴名文件 - 快樂多巴胺 - 博客園 https://www.cnblogs.com/pscc/p/10122517.html
python按時間排序目錄下的文件 - Mr番茄蛋的博客 - CSDN博客 https://blog.csdn.net/qq_35203425/article/details/80903348
python遍歷目錄下的所有文件和目錄詳細介紹 - 修煉之路 - CSDN博客 https://blog.csdn.net/sinat_29957455/article/details/82778306
2、時間datetime、time模塊
# 時間格式轉換
time.strftime('%Y-%m-%d %H:%M:%S')
'2016-11-12 01:20:54'
# 獲取昨天日期
date = datetime.date.today()
>>> date.today() - timedelta(days=1)
datetime.date(2016, 11, 11)
>>> date.isoformat(date.today() - timedelta(days=1))
'2016-11-11'
# 獲取明天日期
>>> date.today() + timedelta(days=1)
datetime.date(2016, 11, 13)
>>> date.isoformat(date.today() + timedelta(days=1))
'2016-11-13'
import datetime
# 獲取前100天日期
(datetime.datetime.now() - datetime.timedelta(days = 100)).strftime("%Y-%m-%d")
Out[18]: '2019-12-13'
# 獲取昨天日期
(datetime.datetime.now() - datetime.timedelta(days = 1)).strftime("%Y-%m-%d")
Out[19]: '2020-03-21'
3、多進程
from multiprocessing import Pool, current_process
import urllib2
urls = [
'http://www.baidu.com',
'http://www.jd1.com',
'http://www.sina.com',
'http://www.163.com',
]
def status_code(url):
print( 'process name:', current_process().name)
try:
req = urllib2.urlopen(url, timeout=2)
return req.getcode()
except urllib2.URLError:
return
p = Pool(processes=4)
for url in urls:
r = p.apply_async(status_code, args=(url,))
#print r.get()
#if r.get(timeout=1) == 200:
if r.get() == 200:
print("%s OK" %url)
else:
print("%s NO" %url)
轉自 博客地址:http://lizhenliang.blog.51cto.com and https://yq.aliyun.com/u/lizhenliang
4、如果文件不存在就創建
if not os.path.exists('host_info'):
f = open('host_info', 'w')
f.close()
5、壓縮文件
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import tarfile
tar = tarfile.open("/root/test/test.tar.gz","w:gz") # 創建壓縮包名
for path,dir,files in os.walk("/root/test"): # 遞歸文件目錄
for file in files:
fullpath = os.path.join(path,file)
tar.add(fullpath) # 創建壓縮包
tar.close()
3種壓縮方法
gzip [解壓縮gzip 刪除原文件]
#壓縮gzip
import gzip
f_in = open('file.log', 'rb')
f_out = gzip.open('file.log.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
#壓縮gzip
File = 'xuesong_18.log'
g = gzip.GzipFile(filename="", mode='wb', compresslevel=9, fileobj=open((r'%s.gz' %File),'wb'))
g.write(open(r'%s' %File).read())
g.close()
#解壓gzip
g = gzip.GzipFile(mode='rb', fileobj=open((r'xuesong_18.log.gz'),'rb'))
open((r'xuesong_18.log'),'wb').write(g.read())
tarfile [歸檔壓縮tar.gz 保留原文件]
# 壓縮tar.gz
import os
import tarfile
tar = tarfile.open("/tmp/tartest.tar.gz","w:gz") # 創建壓縮包名
for path,dir,files in os.walk("/tmp/tartest"): # 遞歸文件目錄
for file in files:
fullpath = os.path.join(path,file)
tar.add(fullpath) # 創建壓縮包
tar.close()
# 解壓tar.gz
import tarfile
tar = tarfile.open("/tmp/tartest.tar.gz")
#tar.extract("/tmp") # 全部解壓到指定路徑
names = tar.getnames() # 包內文件名
for name in names:
tar.extract(name,path="./") # 解壓指定文件
tar.close()
zipfile [解壓縮zip 最大2G]
# 壓縮zip
import zipfile,os
f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED) # ZIP_STORE 為默認表不壓縮. ZIP_DEFLATED 表壓縮
#f.write('file1.txt') # 將文件寫入壓縮包
for path,dir,files in os.walk("tartest"): # 遞歸壓縮目錄
for file in files:
f.write(os.path.join(path,file)) # 將文件逐個寫入壓縮包
f.close()
# 解壓zip
if zipfile.is_zipfile('filename.zip'): # 判斷一個文件是不是zip文件
f = zipfile.ZipFile('filename.zip')
for file in f.namelist(): # 返回文件列表
f.extract(file, r'/tmp/') # 解壓指定文件
#f.extractall() # 解壓全部
python統計apache、nginx訪問日志IP訪問次數
前言:python統計apache、nginx訪問日志IP訪問次數並且排序(顯示前20條)。其實用awk+sort等命令可以實現,用awk數組也可以實現,這里只是用python嘗試下。
apache腳本:
nginx腳本:
ips = {}
with open("/root/access.log-20180629") as fh: for line in fh: ip = line.split(" ")[0] if 6 < len(ip) <=15: ips[ip] = ips.get(ip, 0) + 1 ip_num = [] for ipaddr,num in ips.items(): ip_num.append((ipaddr,num)) ip_num.sort(key=lambda x: x[1], reverse=True) for ipaddr,num in ip_num[:20]: print('IP地址為{}, 訪問次數為{}'.format(ipaddr,num))
壓縮和解壓文件
# 壓縮tar.gz
import os
import tarfile
tar = tarfile.open("/root/test/test.tar.gz","w:gz") # 創建壓縮包名
for path,dir,files in os.walk("/root/test"): # 遞歸文件目錄
for file in files:
fullpath = os.path.join(path,file)
tar.add(fullpath) # 創建壓縮包
tar.close()
# 解壓tar.gz
import tarfile
tar = tarfile.open("/root/test/test.tar.gz")
#tar.extract("/tmp") # 全部解壓到指定路徑
names = tar.getnames() # 包內文件名
for name in names:
tar.extract(name,path="./") # 解壓指定文件
tar.close()
gzip [解壓縮gzip 刪除原文件]
#壓縮gzip
import gzip
f_in = open('file.log', 'rb')
f_out = gzip.open('file.log.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
#壓縮gzip
File = 'xuesong_18.log'
g = gzip.GzipFile(filename="", mode='wb', compresslevel=9, fileobj=open((r'%s.gz' %File),'wb'))
g.write(open(r'%s' %File).read())
g.close()
#解壓gzip
g = gzip.GzipFile(mode='rb', fileobj=open((r'xuesong_18.log.gz'),'rb'))
open((r'xuesong_18.log'),'wb').write(g.read())
輸入參數判斷
try:
textfile1=sys.argv[1]
textfile2=sys.argv[2]
except Exception,e:
print "Error:"+str(e)
print "Usage: simple3.py filename1 filename2"
sys.exit()
判斷輸入參數是否為2個
if len(sys.argv) > 2:
dir1=sys.argv[1]
dir2=sys.argv[2]
else:
print "Usage: ", sys.argv[0], "datadir backupdir"
sys.exit()
輸入去掉空白
_input = input('please input your opinion: ')
ret = _input.strip()
Python執行linux命令並得到執行結果
subprocess
#!/usr/bin/env python
# coding: utf-8
import subprocess
def create_process(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = p.stdout.read()
code = p.wait()
return code, result
code,result = create_process('ls -l test.py')
#print(code)
#print(result)
#根據返回碼判斷是否執行成功
if code:
print("備份MySQL失敗")
print(code, result)
else:
print("備份MySQL成功")
print(code, result)
利用執行命令后的返回代碼判斷
利用執行命令后的返回代碼判斷
#coding:utf-8
import os
import subprocess
cmd = 'ls -l test.txt'
retcode = subprocess.call(cmd, shell=True)
result = p.returncode
if retcode != 0:
print("備份MySQL失敗")
#print(ret)
else:
print("備份MySQL成功")
commands
#!/usr/bin/env python
# coding: utf-8
import sys
import os
import commands
status,output=commands.getstatusoutput('ls -l test.py')
if(status!=0):
print "command is failed, please check"
print output
sys.exit(1)
else:
print "command is sucess."
os.system
ftp客戶端ftplib
from ftplib import FTP ftp = FTP('10.112.13.98') # 連接ftp地址 FTP(host,port,timeout) ftp.login(test1,f0W1V7kw) # 使用默認anonymous登錄 login(user,passwd) ftp.cwd('debian') # 切換到目錄debian ftp.retrlines('LIST') # 打印目錄列表 ftp.retrbinary('RETR README', open('README', 'wb').write) # 下載文件寫到本地
ftp.storbinary("STOR "+filename, fp, bufsize) # 上傳目標文件 ftp.delete('filename') # 刪除ftp中文件 ftp.mkd('dirname') # 在ftp上創建目錄 ftp.size('filename') # 查看文件大小 ftp.quit()
示例
#!/usr/bin/env python
# coding: utf-8
import time
import os
import ftplib
from ftplib import FTP
user='username'
password='password'
filename = 'u_ex'+ time.strftime('%y%m%d') + '.log'
for root,dirs,files in os.walk(r"C:\inetpub\logs\LogFiles\W3SVC2"):
for file in files:
#獲取文件所屬目錄
# print(root)
#獲取文件路徑
# print(os.path.join(root,file))
if filename in os.path.join(root,file):
print(os.path.join(root,file))
local_file = os.path.join(root,file)
# print(type(local_file))
bufsize = 1024
fp = open(local_file, 'rb')
ftp = FTP('IP') # 連接ftp地址 FTP(host,port,timeout)
ftp.login(user, password) # 使用默認anonymous登錄 login(user,passwd)
ftp.cwd('debian') # 切換到目錄debian
ftp.storbinary("STOR "+filename, fp, bufsize) # 上傳目標文件
ftp.retrlines('LIST') # 打印目錄列表
ftp.quit()
fp.close()
print('upload file success.')
python按行讀取文件,如何去掉換行符"\n"
for line in file.readlines():
line=line.strip('\n')
1、列表與字符串轉換
列表轉字符串:
將列表中的內容拼接成一個字符串
將列表中的值轉成字符串

字符串轉列表:
用eval轉換

將字符串每個字符轉成列表中的值

將字符串按分割成列表

2、列表與字典轉換
列表轉字典:
將兩個列表轉成字典

將嵌套列表轉為字典

字典轉列表:
字典中鍵、值轉為列表

3、字典與字符串轉換
字符串轉字典:
用eval轉換

用json.loads 轉換

字典轉字符串:
用json.dumps 轉換

強轉換

列表轉換成字典
def GenPassword_reg(length=16, chars=string.ascii_letters + string.digits):
return ''.join([choice(chars) for i in range(length)])
dic = {}
# result 是個列表
for i in result:
dic[i] = GenPassword_reg()
print(dic)
shell與python間傳遞變量方法
python -> shell:
1.環境變量
import os
var=123或var=’123’
os.environ[’var’]=str(var) #environ的鍵值必須是字符串
os.system(’echo $var’)
2.字符串連接
import os
path=’/root/a.txt’
var=[1]
var=’bash’
os.system(’echo ’ + path) #注意echo后有空格
os.system(‘echo ‘ + str(var[0]))
os.system(’echo ’ + var + ’ /root/c.sh’) #注意echo后和/root前有空格
3.通過管道
import os
var=’123’
os.popen(’wc -c’, ’w’).write(var)
4.通過文件
output = open(‘/tmp/mytxt’, ‘w’)
output.write(S) #把字符串S寫入文件
output.writelines(L) #將列表L中所有的行字符串寫到文件中
output.close()
5.通過重定向標准備輸出
buf = open(’/root/a.txt’, ’w’)
print >> buf, ‘123\n’, ‘abc’
或
print >> open(‘/root/a.txt’, ‘w’), ‘123\n’, ‘abc’ #寫入或生成文件
print >> open(‘/root/a.txt’, ‘a’), ‘123\n’, ‘abc’ #追加
shell -> python:
1.管道
import os
var=os.popen(’echo -n 123’).read( )
print var
2.
import commands
var=commands.getoutput(’echo abc’) #輸出結果
var=commands.getstatusoutput(’echo abc’) #退出狀態和輸出結果
3.文件
input = open(‘/tmp/mytxt’, ‘r’)
S = input.read( ) #把整個文件讀到一個字符串中
S = input.readline( ) #讀下一行(越過行結束標志)
L = input.readlines( ) #讀取整個文件到一個行字符串的列表中
轉自:原文鏈接:https://blog.csdn.net/kpshare/article/details/7523511
python用變量拼接成 shell命令執行
def create_process(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = p.stdout.read()
code = p.wait()
return code, result
mysql_trunc = '/usr/local/mysql/bin/mysql -uroot -p -h localhost -N -e "select * from moffice_hnair_schedule_log_his.' + str(final_list[-1]) + ' limit 1"'
print(mysql_trunc)
code, result = create_process(mysql_trunc)
if code != 0:
print("執行MySQL清除log_interface_result失敗")
print(result)
else:
print("執行MySQL清除log_interface_result成功")
print(result)
在windows下刪除文件報錯

WindowsError: [Error 123] : 'C:\\Users\\chh-huang\\Desktop\test\\2019-11-23.txt'
filename = r'C:\Users\chh-huang\Desktop\test\\' + name
需要在路徑前加r,這樣就沒問題了
filename = r'C:\Users\chh-huang\Desktop\test' + os.sep + name
等於
filename = r'C:\Users\chh-huang\Desktop\test\\' + name
其中,os.sep根據你所處的平台,自動采用相應的分隔符號
>>> os.sep
'/'
Python刪除過期文件
# -*- coding:utf8 -*-
#!/usr/bin/python
import os
import datetime
import time
import shutil
for root, dirs, files in os.walk(r'C:\Users\chh-huang\Desktop\test'):
for name in files:
(y1, m1, d1) = (int(x) for x in name.split('.')[0].split('-'))
# print(y1, m1, d1)
date1 = datetime.date(y1, m1, d1)
datenow = time.strftime('%Y%m%d')
y2 = int(datenow[:4])
m2 = int(datenow[4:6])
d2 = int(datenow[6:])
date2 = datetime.date(y2, m2, d2)
# print(date1, date2)
# 刪除大於等於2天的文件
if (date2 - date1).days >= 2:
print 'Expired file! Deleting file... ', name
print('os.remove(%s) ' % name)
# filename = r'C:\Users\chh-huang\Desktop\test\\' + name
filename = r'C:\Users\chh-huang\Desktop\test' + os.sep + name
os.remove(filename)
函數執行的結果賦值給某個變量(使用return)
files = ['log_interface_view_20194', 'log_interface_view_201905','log_interface_view_201915']
def sort_strings(files):
sort_dict = {}
for file in files:
sort_num = int(file[19:])
sort_dict[file] = sort_num
sorted_dict = sorted(sort_dict.items(), key=lambda x:x[1])
print([key[0] for key in sorted_dict])[0]
# 那如果我讓把函數執行的結果賦值給某個變量
var = sort_strings(files)
print(var)
執行結果,變量沒有賦值成功
[root@hch test 16:03:24]# python dbsort.py
log_interface_view_20194
None
這是就需要使用return了 def sort_strings(files):
sort_dict = {}
for file in files:
sort_num = int(file[19:])
sort_dict[file] = sort_num
sorted_dict = sorted(sort_dict.items(), key=lambda x:x[1])
# print([key[0] for key in sorted_dict])[0]
return ([key[0] for key in sorted_dict])[0]
var = sort_strings(files)
print(var)
執行
[root@hch test 16:05:56]# python dbsort.py
log_interface_view_20194
將列表split分成 prefix, suffix
_input = ['ip_10.2.223.5', 'ip_10.2.220.3', 'port_22', 'port_8001', 'port_80', 'ip_172.16.8.35']
'''如果ip開頭:不變
port開頭:把下划線去掉
列表推導式:第二種形態去完成'''
答案:
for item in _input:
if item.startswith('ip'):
_list.append(item)
elif item.startswith('port'):
prefix, suffix = item.split('_')
item = prefix + suffix
_list.append(item)
print(_list)
列表推導式
[item.replace('_','') if item.startswith('port') else item for item in _input ]
pymysql使用方法
#!/usr/bin/env python
#coding:utf-8
import pymysql
#連接數據庫
db = pymysql.connect(host = 'localhost', user = 'root', password = 'password', db = 'demo1', port = 3306)
print(db)
cur = db.cursor()
sql = "select * from login where id = {}".format(1)
print(sql)
try :
#查詢
cur.execute(sql)
#查詢所有數據
results = cur.fetchall()
#獲取單條數據
# results = cur.fetchone()
for i in results :
id = i[0]
username = i[1]
passwrod = i[2]
print('id:{},username:{},password:{}'.format(id, username, passwrod))
#添加數據
sql_insert = "insert into login(username,password) values ({},{})".format('"xiaowamg33"',666)
print('sql_insrt:{}'.format(sql_insert))
id = cur.execute(sql_insert)
print('id:{}'.format(id))
db.commit()
#修改
sql_update = 'update login set username = {} where id = {}'.format('"dagege"',1)
id_update = cur.execute(sql_update)
print('修改的行數:{}'.format(id_update))
db.commit()
#刪除
sql_delete = 'delete from login where id={}'.format(2)
id_dedete = cur.execute(sql_delete)
print('刪除的行數:{}'.format(id_dedete))
db.commit()
except Exception as e:
print(e)
db.rollback()
finally:
db.close()
轉自
pymysql的使用簡單使用方法 - a599174211的博客 https://blog.csdn.net/a599174211/article/details/82702219
參考
關於安裝pymysql - sike8 - 博客園 https://www.cnblogs.com/sike8/p/11059878.html
Python腳本:自動備份並壓縮文件,同時刪除過期文件
參考鏈接如下
(1條消息)python在windows中備份文件並壓縮的解決辦法 - qq_23664975的博客 - CSDN博客 https://blog.csdn.net/qq_23664975/article/details/77718843
(1條消息)(windows)python腳本:自動備份並壓縮文件,同時刪除過期文件 - 點點滴滴 - CSDN博客 https://blog.csdn.net/cogent2001/article/details/1953031
(1條消息)python壓縮日志並刪除原文件 - 獨孤仁的專欄 - CSDN博客 https://blog.csdn.net/kong2030/article/details/84993544
文件的讀、寫
#!/usr/bin/env python
#coding:utf-8
# 讀取文件
f = open(r'2', 'r')
content = f.readlines()
f.close()
print(content)
# 寫入文件多行數據
with open('/etc/yum.repos.d/redhat7_nanshu.repo', 'w') as f: # 采用with語法結構可以讓程序自動關閉打開的文件,不用自己處理
f.writelines(['[base]\n', 'name=CentOS-7 - Base\n'])
# 讀取打印多行文件
with open('text.txt') as rows:
for row in rows:
print(row, end='')
文件的移動和復制
#!/usr/bin/env python
#coding:utf-8
src_dir = '/etc/yum.repos.d'
dst_dir = '/tmp/yum-bak'
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
if os.path.exists(dst_dir):
for root,dirs,files in os.walk(src_dir):
for file in files:
#獲取文件所屬目錄
print(root)
#獲取文件路徑
print(os.path.join(root,file))
# 文件完整路徑
src_file = os.path.join(root, file)
# 復制文件
shutil.copy(src_file, dst_dir)
# 移動文件
shutil.move(src_file, dst_dir)
# 移動文件並重命名
dst_file = os.path.join(dst_dir, file + time.strftime('%Y-%m-%d %H:%M:%S'))
shutil.move(src_file, dst_file)
code,result = create_process("cat /etc/redhat-release|awk '{print $1}'")
判斷文件是否存在
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
if os.path.exists(dst_dir):
端口telnet
#!/usr/bin/env python #coding:utf-8
import telnetlib
# 判斷端口是否通 def port_scan(ip): try: telnetlib.Telnet(host=ip, port=80, timeout=2) print(ip, 80, 'is avaliable') except Exception, e: print(ip, 80, 'is not avaliable') raise e exit() else: pass port_scan('www.baidu.com')
多線程

# coding:utf8
import time
from concurrent.futures import ThreadPoolExecutor
TEST_COUNT = 100
THREADS_SUM = 50
thread_pool = ThreadPoolExecutor(THREADS_SUM)
def test():
time.sleep(1)
print('run test')
def runfunc(count):
for i in range(count):
thread_pool.submit(testi)
runfunc(TEST_COUNT)
windows輸出中文亂碼
def paint():
# os.system('cls')
print("=================================================")
print("| The Points Menu: |")
print("=================================================")
print("| 1. gateway上傳變更包 |").decode("utf-8").encode("gbk")
print("| 2. shopping上傳變更包 |").decode("utf-8").encode("gbk") print("| 0. 退出 |").decode("utf-8").encode("gbk") print("================================================")
用.decode("utf-8").encode("gbk")來解決。
Python啟動windows服務或程序
啟動服務
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
try:
os.system('NET STOP MSSQLSERVER')
except OSError:
print "system error"
os.system('NET START MSSQLSERVER')
啟動程序
import os
def open_app(app_dir):
os.startfile(app_dir) #os.startfile()打開外部應該程序,與windows雙擊相同
if __name__ == "__main__":
app_dir = r'G:\yeshen\Nox\bin\Nox.exe'#指定應用程序目錄
open_app(app_dir)
用enumerate對現有列表每項進行修改
對現有列表img_list,每項中添加新的字符串,不用新建列表,用enumerate就可以做到
for i,v in enumerate(img_list):
img_list[i] = "http://www.xueshengmai.com" + v
print(img_list)
Python爬蟲
實例1:爬取豆瓣圖書名
# coding: utf-8
import requests
import re
# 制作headers
head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
page_obj = requests.get("https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4", headers = head)
page = page_obj.text
# print(page)
regex = '<a href="https://book.douban.com/subject/\d+/" title="(.+?)"'
data = re.findall(regex, page)
for i in data:
print(i.encode('gbk'))
print(data)
實例2:爬取校花網站圖片
#!/usr/bin/env python
# coding: utf-8
import requests
import re
from urllib import request
page = requests.get("http://www.xueshengmai.com/hua/")
content = page.text
# print(content)
# 正則表達式
regex = '<img width="210" alt=".+?" src="(.+?)" />'
img_list = re.findall(regex, content)
print(img_list)
# 拼接圖片地址
for i,v in enumerate(img_list):
img_list[i] = "http://www.xueshengmai.com" + v
print(img_list)
# 下載圖片
count = 0
for i in img_list:
# i為下載地址 后面為保存的名字
request.urlretrieve(i, "美女%s.jpg" % count)
print("第%s圖片下載完成" % (count + 1))
count += 1
with open寫入Excel CSV文件
將數據寫入guazi.csv文件
with open(r'guazi.csv', 'w') as f:
for li in title_url:
name = li.xpath('.//h2/text()').extract()
year = li.xpath('.//div/text()').extract()
price = li.xpath('.//div/p/text()').extract()
price_real = li.xpath('.//em/text()').extract()
img = li.xpath('.//img/@src').extract()
print('車型:{}, 車況:{},{}, 價格:{}, 原價:{}, 圖片:{}'.format(name[0], year[0], year[1], price[0], price_real[0], img[0]))
f.write('{},{},{},{},{}\n'.format(name[0], year[0], year[1], price[0], price_real[0]))
保存為中文csv文件
# 保存到CSV文件中, 保存為中文編碼選擇gb1803
with open(name+'.csv', 'w', encoding='gb18030') as f:
f.write('職位名,公司名,薪資,工作地點,職位連接,公司鏈接,發布日期\n')
Tomcat配置文件注釋
#!/usr/bin/env python
# coding: utf-8
# Tomcat配置文件注釋
import os
import re
with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
for line in fr:
regx = re.compile(r'\<Connector.*?protocol="AJP/1.3" redirectPort="8443" \/\>') # 匹配替換的內容
ret = ''.join(re.findall(regx, line)) # 列表轉成成字符串
if ret:
print('匹配成功,{}'.format(ret))
ret1 = ''.join(ret.replace('<Connector', '<-- <Connector'))
line = ''.join(ret1.replace('>', '> -->'))
print('替換后,{}'.format(line))
fw.write(line)
執行效果

Python對文件修改,替換,刪除
一、Python使用replace修改原文件內容方式:
#!/usr/bin/env python # -*- coding:utf8 -*- old_str = "aaa" #老文件內容字段 new_str = "bbb" #要改成字段 file_data = '' with open('/opt/1.txt', 'r', encoding='utf-8') as f: for line in f: if old_str in line: line = line.replace(old_str, new_str) file_data += line with open('/opt/1.txt', 'w',encoding='utf-8') as f: f.write(file_data)
二、python 使用正則表達式 替換文件內容 re.sub 方法替換
import re,os def alter(file,old_str,new_str): with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2: for line in f1: f2.write(re.sub(old_str,new_str,line)) os.remove(file) os.rename("%s.bak" % file, file) alter("file1", "admin", "password"
對文件所有行前添加‘#’注釋
#!/usr/bin/env python
# coding: utf-8
import os
import re
with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
for line in fr:
after = '#' + line
fw.write(after)
對文件進行注釋#,空行不注釋
#!/usr/bin/env python
# coding: utf-8
import os
import re
with open(r'server.xml.20200226', 'r') as fr, open("server.xml.20200226.bak", 'w') as fw:
for line in fr:
if not line.strip() or line.startswith('#'): #判斷是否是空行或注釋行
fw.write(line)
else:
after = '#' + line
print(after)
fw.write(after)
Python發送郵件
純文本郵件
import smtplib
from email.mime.text import MIMEText
def send_text_only():
# 1.發件人、授權碼,收件人信息
from_addr = "9071xxxxx@qq.com"
pwd = "aqinixxxxxxxxxxx"
to_addr = "sunxxxxx@efee.com.cn" # 發送給多個,直接["郵箱1","郵箱2","郵箱3"]
# 2.發送內容
msg = MIMEText("hello, I am suner!!")
msg["Subject"] = "測試報告"
msg["From"] = from_addr
msg["To"] = to_addr
# 3.連接smtp服務器,登錄服務器並發送文本
smtp_server = "smtp.qq.com"
server = smtplib.SMTP(smtp_server, 25)
server.login(from_addr, pwd)
server.sendmail(from_addr, to_addr, msg.as_string()) # as_string()把MIMEText變成一個str
server.close()
if __name__ == '__main__':
send_text_only()
多個附件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
def send_enclosure():
# 1.發件人、授權碼,收件人信息
from_addr = "907xxxxx@qq.com"
pwd = "aqinirkcqyxubdbf"
to_addr = "sunyingying@efee.com.cn"
# 2.創建實例對象,設置主題等信息
msg = MIMEMultipart()
msg["Subject"] = "收到一個文檔文件和圖片文件"
msg["From"] = from_addr
msg["To"] = to_addr
# 郵件內容(按每個部分)
part1 = MIMEText("這是一個word文件和圖片")
msg.attach(part1)
# 添加圖片附件
part2 = MIMEApplication(open("meimei.jpg", "rb").read())
part2.add_header("Content-Disposition", "attachment", filename="meimei.jpg")
msg.attach(part2)
# 添加word附件
part3 = MIMEApplication(open("1.docx","rb").read())
part3.add_header("Content-Disposition", "attachment", filename="1.docx")
msg.attach(part3)
# 3.連接smtp服務器,登錄服務器並發送文本
smtp_server = "smtp.qq.com"
server = smtplib.SMTP(smtp_server,25)
server.login(from_addr,pwd)
server.sendmail(from_addr,to_addr,msg.as_string()) # as_string()把MIMEText變成一個str
server.close()
if __name__ == '__main__':
send_enclosure()
參考
(3條消息)Python基礎-46-郵件發送(帶附件)_Python_karry_孫二的博客-CSDN博客
https://blog.csdn.net/qq_39620483/article/details/90903782
Python輸入參數執行腳本
l = len(sys.argv)
if l == 1:
s = """
請輸入參數
參數說明:
up_his 更新歷史記錄表
up_hot 更新實時熱搜
up_det 更新詳細表
"""
print(s)
else:
order = sys.argv[1]
if order == "up_his":
update_history()
elif order == "up_det":
update_details()
elif order == "up_hot":
get_baidu_hot()
update_hot_search()
# 執行
python test.py up_his