python join 和 split方法的使用,join用来连接字符串,split恰好相反,拆分字符串的。
作者归档:Will
python中文decode和encode转码
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312′),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312′),表示将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
(与代码本身的编码是一致的!)
测试:
我的eclipse里面代码为utf-8编码的。然后我这样写代码
s=”你好”
s=s.decode(‘gb2312′).encode(‘utf-8′)
print s
报错:
UnicodeDecodeError: ‘gb2312′ codec can’t decode bytes in position 2-3: illegal multibyte sequence
原因:因为我的文件为UTF-8编码的。所以你想用gb2312将其转成unicode是不可能的。
所以正确的写法应当是:
s=”你好”
print s
s=s.decode(‘utf-8′).encode(‘utf-8′) 要用UTF-8来做编码
print s
哈哈发现打印出来的是乱码那只能说明一件事情就是我的eclipse控制台是GB2312的编码!
请看:
如何获得系统的默认编码?
#!/usr/bin/env python
#coding=utf-8
import sys
print sys.getdefaultencoding()
该段程序在英文WindowsXP上输出为:ascii 。我发现我的linux上面也是ascii编码。所以我想打印出来看到的乱码是正常的。因为我其实是utf-8编码的。
在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。(是的。我的eclipse控制台就是gb2312的编码所以我文件保存为utf-8的时候然后再通过打印是乱码了!)
1、读文件命令肯定是:
myfile = codecs.open(“c.html“,”r”,”utf-8″) 因为我用gb2312来读的话报错
心得:检查一个字符串是什么编码只需要看一下decode 如果用gb2312来decode没报错的话就表示是gb2312
如果用utf-8来decode没有报错的话就表示是utf-8
现在遇到一个问题就是
请看:
myfile = codecs.open(“c.html”,”r”,”utf-8″)
str = myfile.read()
content = str.replace(“\n”,” “)
content = content.encode(‘utf-8′)
print content
没有报错
再看:
myfile = codecs.open(“c.html”,”r”,”utf-8″)
str = myfile.read() #显示中文
content = str.replace(“\n”,” “)
content = content.encode(‘gb2312′) 用gb2312
print content
报错:UnicodeEncodeError: ‘gb2312′ codec can’t encode character u’\u2014′ in position 12628
再看:
myfile = codecs.open(“d.html”,”r”,”utf-8″)
str = myfile.read() #显示中文
content = str.replace(“\n”,” “)
content = content.encode(‘gb2312′) 用gb2312
print content
没问题
myfile = codecs.open(“d.html”,”r”,”utf-8″)
str = myfile.read() #显示中文
content = str.replace(“\n”,” “)
content = content.encode(‘utf-8′)
print content
也没问题
结论:我想是c.html页面里面 存在某些 特殊字符 只支持utf-8编码。而不支持gb2312的编码!
而d.html没有这种特殊字符。这也就解释了为什么
有的文件并没有发生我们想像中的问题!
所以我感觉打开文件肯定是用utf-8来读取得到一个unicode编码值!
然后对其做utf-8的编码处理。因为如果你做gb2312处理的话就会报错了!
接着:
我看了一下我的正则表达式发现如果用gb2312做解码处理的话一样会报错。所以断定肯定是utf-8编码了!
regex3 = regex3.decode(‘utf-8′)
print type(regex3) #返回为unicode码了!
print regex3 #居然打印为正常的中文显示了 奇怪
尝试解决办法:
1、全部用unicode处理
即正则我用regex3 = regex3.decode(‘utf-8′) 将其处理成 unicode编码了。然后内容也
print type(content) 也是unicode编码。结果还是不行!
难道是我的linux终端的编码引起的吗?我看了一下
locale 发现是GBK的终端的。即只有GBK编码才能显示出来为中文的!
于是我将
regex3 = regex3.decode(‘utf-8′).encode(‘gb2312′) 编码成gb2312结果可以显示中文!
OK。我又将我的内容也一起弄成GB2312
content = content.encode(‘gb2312′,’ignore’)
print content 也可以成功打印出来中文。
我想这个时候应该没有什么问题了吧。结果一用正则又死掉了。昏死!!!!!!!
换另外一个好的文件测试下看看:换了之后发现没死而且成功了!
所以我觉得:肯定是这个文件里面的某些内容与正则匹配出现了冲突!导致的!
继续跟踪:
出现如下的情况
myfile = codecs.open(“01.htm”,”r”,”utf-8″,”ignore”)
str = myfile.read()
content = str.replace(“\n”,” “)
print type(content) #发现是unicode码
regex3 = ‘class=wpcpsCSS>([^<]+)(?:.*?wpcppb_CSS> ([0-9]+) </span>)?.*?(?:.*?(已被关闭))?.*?([0-9]+)个回答.*?([0-9]+)次浏览.*?(?:<div>.*?user\?userid=([0-9]+).*?>(.*?)</a> </div>.*?)?(?:user\?userid=([0-9]+)”)?]+”>([^<]+).*?class=wpcptsCSS>([^<]+).*?([0-9.]{9,}\*).*?class=wpcpdCSS>(.*?)</div> <div>’
content = content.encode(‘utf-8′)
p=re.compile(regex3)
results = p.findall(content)
没有什么问题可以成功出来结果。但是我
将content = content.encode(‘gb2312′) 的话就发现 死掉了!
说明我的内容content与我的正则的编码其实是不一样的!
我现在将我的正则也调成gb2312来测试。结果发现可以出来。而且我的结果
results = p.findall(content)
for ele in results:
print ele[0],ele[1],ele[2],ele[3],ele[4],ele[5],ele[6],ele[7],ele[8],ele[9],ele[10]
在eclipse(默认为gb2312)下面也是没有问题的了!~
所以我想:如果content是GBK那正则的内容也应当是GBK 即两者的编码一定要保持一致!否则就会出现死掉程序的情况!
现在我这样来处理
全部使用unicode编码处理
myfile = codecs.open(“right.html”,”r”)
str = myfile.read()
content = str.replace(“\n”,” “)
content = content.decode(‘utf-8′,’ignore’) #使用utf-8解码出来
都使用unicode编码吧
现在正则也用
regex3 = regex3.decode(‘utf-8′,’ignore’) 使用utf-8搞成unicode编码
OK现在再来测试!
结论:
解决正则出现中文的BUG结论:
1、打开文件
myfile = codecs.open(“right.html”,”r”)
不需要设置其编码的!
设置编码格式
str = myfile.read()
content = str.replace(“\n”,” “)
content = content.decode(‘utf-8′,’ignore’) #使用utf-8解码成unicode格式
正则:
regex3 = regex3.decode(‘utf-8′,’ignore’) #正则也统一使用utf-8解码成unicode格式
然后就可以
p=re.compile(regex3)
results = p.findall(content)
调用正则了!
Python常见文件操作的函数示例
# -*-coding:utf8 -*-
””’
Python常见文件操作示例
os.path 模块中的路径名访问函数
分隔
basename() 去掉目录路径, 返回文件名
dirname() 去掉文件名, 返回目录路径
join() 将分离的各部分组合成一个路径名
split() 返回(dirname(), basename()) 元组
splitdrive() 返回(drivename, pathname) 元组
splitext() 返回(filename, extension) 元组
信息
getatime() 返回最近访问时间
getctime() 返回文件创建时间
getmtime() 返回最近文件修改时间
getsize() 返回文件大小(以字节为单位)
查询
exists() 指定路径(文件或目录)是否存在
isabs() 指定路径是否为绝对路径
isdir() 指定路径是否存在且为一个目录
isfile() 指定路径是否存在且为一个文件
islink() 指定路径是否存在且为一个符号链接
ismount() 指定路径是否存在且为一个挂载点
samefile() 两个路径名是否指向同个文件
os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false
os.path.isfile(name):判断name是不是一个文件,不存在name也返回false
os.path.exists(name):判断是否存在文件或目录name
os.path.getsize(name):获得文件大小,如果name是目录返回0L
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式
os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext():分离文件名与扩展名
os.path.join(path,name):连接目录与文件名或目录
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路径
os模块中的文件操作:
os 模块属性
linesep 用于在文件中分隔行的字符串
sep 用来分隔文件路径名的字符串
pathsep 用于分隔文件路径的字符串
curdir 当前工作目录的字符串名称
pardir (当前工作目录的)父目录字符串名称
1.重命名:os.rename(old, new)
2.删除:os.remove(file)
3.列出目录下的文件:os.listdir(path)
4.获取当前工作目录:os.getcwd()
5.改变工作目录:os.chdir(newdir)
6.创建多级目录:os.makedirs(r”c:\python\test”)
7.创建单个目录:os.mkdir(“test”)
8.删除多个目录:os.removedirs(r”c:\python”) #删除所给路径最后一个目录下所有空目录。
9.删除单个目录:os.rmdir(“test”)
10.获取文件属性:os.stat(file)
11.修改文件权限与时间戳:os.chmod(file)
12.执行操作系统命令:os.system(“dir”)
13.启动新进程:os.exec(), os.execvp()
14.在后台执行程序:osspawnv()
15.终止当前进程:os.exit(), os._exit()
16.分离文件名:os.path.split(r”c:\python\hello.py”) –> (“c:\\python”, “hello.py”)
17.分离扩展名:os.path.splitext(r”c:\python\hello.py”) –> (“c:\\python\\hello”, “.py”)
18.获取路径名:os.path.dirname(r”c:\python\hello.py”) –> “c:\\python”
19.获取文件名:os.path.basename(r”r:\python\hello.py”) –> “hello.py”
20.判断文件是否存在:os.path.exists(r”c:\python\hello.py”) –> True
21.判断是否是绝对路径:os.path.isabs(r”.\python\”) –> False
22.判断是否是目录:os.path.isdir(r”c:\python”) –> True
23.判断是否是文件:os.path.isfile(r”c:\python\hello.py”) –> True
24.判断是否是链接文件:os.path.islink(r”c:\python\hello.py”) –> False
25.获取文件大小:os.path.getsize(filename)
26.*******:os.ismount(“c:\\”) –> True
27.搜索目录下的所有文件:os.path.walk()
shutil模块对文件的操作:
1.复制单个文件:shultil.copy(oldfile, newfle)
2.复制整个目录树:shultil.copytree(r”.\setup”, r”.\backup”)
3.删除整个目录树:shultil.rmtree(r”.\backup”)
临时文件的操作:
1.创建一个唯一的临时文件:tempfile.mktemp() –> filename
2.打开临时文件:tempfile.TemporaryFile()
内存文件(StringIO和cStringIO)操作
[4.StringIO] #cStringIO是StringIO模块的快速实现模块
1.创建内存文件并写入初始数据:f = StringIO.StringIO(“Hello world!”)
2.读入内存文件数据:print f.read() #或print f.getvalue() –> Hello world!
3.想内存文件写入数据:f.write(“Good day!”)
4.关闭内存文件:f.close()
”’
import os
import os.path
import unittest
import time
#import pygame
class PyFileCommonOperatorTest(unittest.TestCase):
def __init__(self):
“”"constructor”"”
def test01(self):
print os.linesep
print os.sep
print os.pathsep
print os.curdir
print os.pardir
print os.getcwd()
print ‘unittest here’
if __name__ == “__main__”:
t = PyFileCommonOperatorTest()
t.test01()
#读文件的写法:
#读文本文件:
input = open(‘data’, ‘r’)#第二个参数是默认的,可以不加
#读二进制文件:
input = open(‘data’, ‘rb’)
#读取所有文件内容:
open(‘xxoo.txt’).read()
#读取固定字节
open(‘abinfile’, ‘rb’).read(100)
#读每行
file_object.readlines()
作者 scelong
python的一个字典创建程序
来源:素包子
字典的用处非常大,昨天在网上找了个能在linux跑的字典程序,分享一下。
#!/usr/bin/python
f=open(‘wordlist’, ‘w’)
def xselections(items, n):
if n==0: yield []
else:
for i in xrange(len(items)):
for ss in xselections(items, n-1):
yield [items[i]]+ss
# Numbers = 48 – 57
# Capital = 65 – 90
# Lower = 97 – 122
numb = range(48,58)
cap = range(65,91)
low = range(97,123)
choice = 0
while int(choice) not in range(1,8):
choice = raw_input(”’
1) Numbers
2) Capital Letters
3) Lowercase Letters
4) Numbers + Capital Letters
5) Numbers + Lowercase Letters
6) Numbers + Capital Letters + Lowercase Letters
7) Capital Letters + Lowercase Letters
: ”’)
choice = int(choice)
poss = []
if choice == 1:
poss += numb
elif choice == 2:
poss += cap
elif choice == 3:
poss += low
elif choice == 4:
poss += numb
poss += cap
elif choice == 5:
poss += numb
poss += low
elif choice == 6:
poss += numb
poss += cap
poss += low
elif choice == 7:
poss += cap
poss += low
bigList = []
for i in poss:
bigList.append(str(chr(i)))
MIN = raw_input(“What is the min size of the word? “)
MIN = int(MIN)
MAX = raw_input(“What is the max size of the word? “)
MAX = int(MAX)
for i in range(MIN,MAX+1):
for s in xselections(bigList,i): f.write(”.join(s) + ‘ ’)
Python的url编码函数使用的一个小问题
python的url编码函数是在类urllib库中,使用方法是:
编码:urllib.quote(string[, safe]),除了三个符号“_.-”外,将所有符号编码,后面的参数safe是不编码的字符,使用的时候如果不设置的话,会将斜杠,冒号,等号,问号都给编码了。
如下:
>>> import urllib >>> print urllib.quote(“http://neeao.com/index.php?id=1“) http%3A//neeao.com/index.php%3Fid%3D1 这样在使用urllib.urlopen打开编码后的网址的时候,就会报错了。
设置下不编码的符号:
>>> print urllib.quote(“http://neeao.com/index.php?id=1″,”:?=/“)http://neeao.com/index.php?id=1 这下就好了。
python urllib2详解及实例
urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口,
这是具有利用不同协议获取URLs的能力,他同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他。
它们通过handlers和openers的对象提供。
urllib2支持获取不同格式的URLs(在URL的”:”前定义的字串,例如:”ftp”是”ftp:python.ort/”的前缀),它们利用它们相关网络协议(例如FTP,HTTP)
进行获取。这篇教程关注最广泛的应用–HTTP。
对于简单的应用,urlopen是非常容易使用的。但当你在打开HTTP的URLs时遇到错误或异常,你将需要一些超文本传输协议(HTTP)的理解。
最权威的HTTP文档当然是RFC 2616(http://rfc.net/rfc2616.html)。这是一个技术文档,所以并不易于阅读。这篇HOWTO教程的目的是展现如何使用urllib2,
并提供足够的HTTP细节来帮助你理解。他并不是urllib2的文档说明,而是起一个辅助作用。
获取 URLs
最简单的使用urllib2将如下所示
[python:nogutter]
import urllib2
response = urllib2.urlopen(‘http://python.org/’)
html = response.read()
urllib2的很多应用就是那么简单(记住,除了”http:”,URL同样可以使用”ftp:”,”file:”等等来替代)。但这篇文章是教授HTTP的更复杂的应用。
HTTP是基于请求和应答机制的–客户端提出请求,服务端提供应答。urllib2用一个Request对象来映射你提出的HTTP请求,在它最简单的使用形式中你将用你要请求的
地址创建一个Request对象,通过调用urlopen并传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。
[python]
import urllib2
req = urllib2.Request(‘http://www.voidspace.org.uk’)
response = urllib2.urlopen(req)
the_page = response.read()
记得urllib2使用相同的接口处理所有的URL头。例如你可以像下面那样创建一个ftp请求。
req = urllib2.Request(‘ftp://example.com/’)
在HTTP请求时,允许你做额外的两件事。首先是你能够发送data表单数据,其次你能够传送额外的关于数据或发送本身的信息(“metadata”)到服务器,此数据作为HTTP的”headers”来发送。
接下来让我们看看这些如何发送的吧。
Data数据
有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本,或其他WEB应用程序挂接)。在HTTP中,这个经常使用熟知的POST请求发送。这个通常在你提交一个HTML表单时由你的浏览器来做。
并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非
urllib2。
[python:nogutter]
import urllib
import urllib2
url = ‘http://www.someserver.com/cgi-bin/register.cgi’
values = {‘name’ : ‘Michael Foord’,
‘location’ : ‘Northampton’,
‘language’ : ‘Python’ }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
记住有时需要别的编码(例如从HTML上传文件–看http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13 HTML Specification, Form Submission的详细说明)。
如ugoni没有传送data参数,urllib2使用GET方式的请求。GET和POST请求的不同之处是POST请求通常有”副作用”,它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。
尽管HTTP标准说的很清楚POSTs通常会产生副作用,GET请求不会产生副作用,但没有什么可以阻止GET请求产生副作用,同样POST请求也可能不产生副作用。Data同样可以通过在Get请求
的URL本身上面编码来传送。
可看如下例子
[python:nogutter]
>>> import urllib2
>>> import urllib
>>> data = {}
>>> data['name'] = ‘Somebody Here’
>>> data['location'] = ‘Northampton’
>>> data['language'] = ‘Python’
>>> url_values = urllib.urlencode(data)
>>> print url_values
name=Somebody+Here&language=Python&location=Northampton
>>> url = ‘http://www.example.com/example.cgi’
>>> full_url = url + ‘?’ + url_values
>>> data = urllib2.open(full_url)
Headers
我们将在这里讨论特定的HTTP头,来说明怎样添加headers到你的HTTP请求。
有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器。默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.5),
这个身份可能会让站点迷惑,或者干脆不工作。浏览器确认自己身份是通过User-Agent头,当你创建了一个请求对象,你可以给他一个包含头数据的字典。下面的例子发送跟上面一样的内容,但把自身
模拟成Internet Explorer。
[python:nogutter]
import urllib
import urllib2
url = ‘http://www.someserver.com/cgi-bin/register.cgi’
user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)’
values = {‘name’ : ‘Michael Foord’,
‘location’ : ‘Northampton’,
‘language’ : ‘Python’ }
headers = { ‘User-Agent’ : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
response应答对象同样有两个很有用的方法。看下面的节info and geturl,我们将看到当发生错误时会发生什么。
Handle Exceptions处理异常
当urlopen不能够处理一个response时,产生urlError(不过通常的Python APIs异常如ValueError,TypeError等也会同时产生)。
HTTPError是urlError的子类,通常在特定HTTP URLs中产生。
URLError
通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。这种情况下,异常同样会带有”reason”属性,它是一个tuple,包含了一个错误号和一个错误信息。
例如
[python:nogutter]
>>> req = urllib2.Request(‘http://www.pretend_server.org’)
>>> try: urllib2.urlopen(req)
>>> except URLError, e:
>>> print e.reason
>>>
(4, ‘getaddrinfo failed’)
HTTPError
服务器上每一个HTTP 应答对象response包含一个数字”状态码”。有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答(例如:假如response是一个”重定向”,需要客户端从别的地址获取文档
,urllib2将为你处理)。其他不能处理的,urlopen会产生一个HTTPError。典型的错误包含”404″(页面无法找到),”403″(请求禁止),和”401″(带验证请求)。
请看RFC 2616 第十节有所有的HTTP错误码
HTTPError实例产生后会有一个整型’code’属性,是服务器发送的相关错误号。
Error Codes错误码
因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。
BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了RFC 2616使用的所有的应答号。这里为了方便重新展示该字典。(译者略)
当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。你可以使用HTTPError实例作为页面返回的应答对象response。这表示和错误属性一样,它同样包含了read,geturl,和info方法。
[python:nogutter]
>>> req = urllib2.Request(‘http://www.python.org/fish.html’)
>>> try:
>>> urllib2.urlopen(req)
>>> except URLError, e:
>>> print e.code
>>> print e.read()
>>>
404
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<?xml-stylesheet href=”./css/ht2html.css”
type=”text/css”?>
<html><head><title>Error 404: File Not Found</title>
…… etc…
Wrapping it Up包装
所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。我则比较喜欢第二种。
第一个:
[python:nogutter]
from urllib2 import Request, urlopen, URLError, HTTPError
req = Request(someurl)
try:
response = urlopen(req)
except HTTPError, e:
print ‘The server couldn/’t fulfill the request.’
print ‘Error code: ‘, e.code
except URLError, e:
print ‘We failed to reach a server.’
print ‘Reason: ‘, e.reason
else:
# everything is fine
注意:except HTTPError 必须在第一个,否则except URLError将同样接受到HTTPError。
第二个:
[python:nogutter]
from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
response = urlopen(req)
except URLError, e:
if hasattr(e, ‘reason’):
print ‘We failed to reach a server.’
print ‘Reason: ‘, e.reason
elif hasattr(e, ‘code’):
print ‘The server couldn/’t fulfill the request.’
print ‘Error code: ‘, e.code
else:
# everything is fine
info and geturl
urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl()
geturl — 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许
会有重定向。获取的URL或许跟请求URL不同。
info — 这个返回对象的字典对象,该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage 实例。
经典的headers包含”Content-length”,”Content-type”,和其他。查看Quick Reference to HTTP Headers(http://www.cs.tut.fi/~jkorpela/http.html)
获取有用的HTTP头列表,以及它们的解释意义。
Openers和Handlers
当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例,urllib2.OpenerDirector可能名字可能有点让人混淆。)正常情况下,我们
使用默认opener — 通过urlopen,但你能够创建个性的openers,Openers使用处理器handlers,所有的“繁重”工作由handlers处理。每个handlers知道
如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面,例如HTTP重定向或者HTTP cookies。
如果你希望用特定处理器获取URLs你会想创建一个openers,例如获取一个能处理cookie的opener,或者获取一个不重定向的opener。
要创建一个 opener,实例化一个OpenerDirector,然后调用不断调用.add_handler(some_handler_instance).
同样,可以使用build_opener,这是一个更加方便的函数,用来创建opener对象,他只需要一次函数调用。
build_opener默认添加几个处理器,但提供快捷的方法来添加或更新默认处理器。
其他的处理器handlers你或许会希望处理代理,验证,和其他常用但有点特殊的情况。
install_opener 用来创建(全局)默认opener。这个表示调用urlopen将使用你安装的opener。
Opener对象有一个open方法,该方法可以像urlopen函数那样直接用来获取urls:通常不必调用install_opener,除了为了方便。
Basic Authentication 基本验证
为了展示创建和安装一个handler,我们将使用HTTPBasicAuthHandler,为了更加细节的描述本主题–包含一个基础验证的工作原理。
请看Basic Authentication Tutorial(http://www.voidspace.org.uk/python/articles/authentication.shtml)
当需要基础验证时,服务器发送一个header(401错误码) 请求验证。这个指定了scheme 和一个‘realm’,看起来像这样:Www-authenticate: SCHEME realm=”REALM”.
例如
Www-authenticate: Basic realm=”cPanel Users”
客户端必须使用新的请求,并在请求头里包含正确的姓名和密码。这是“基础验证”,为了简化这个过程,我们可以创建一个HTTPBasicAuthHandler的实例,并让opener使用这个
handler。
HTTPBasicAuthHandler使用一个密码管理的对象来处理URLs和realms来映射用户名和密码。如果你知道realm(从服务器发送来的头里)是什么,你就能使用HTTPPasswordMgr。
通常人们不关心realm是什么。那样的话,就能用方便的HTTPPasswordMgrWithDefaultRealm。这个将在你为URL指定一个默认的用户名和密码。这将在你为特定realm提供一个其他组合时
得到提供。我们通过给realm参数指定None提供给add_password来指示这种情况。
最高层次的URL是第一个要求验证的URL。你传给.add_password()更深层次的URLs将同样合适。
[python:nogutter]
# 创建一个密码管理者
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# 添加用户名和密码
# 如果知道 realm, 我们可以使用他代替 “None“.
top_level_url = “http://example.com/foo/”
password_mgr.add_password(None, top_level_url, username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
# 创建 “opener” (OpenerDirector 实例)
opener = urllib2.build_opener(handler)
# 使用 opener 获取一个URL
opener.open(a_url)
# 安装 opener.
# 现在所有调用 urllib2.urlopen 将用我们的 opener.
urllib2.install_opener(opener)
注意:以上的例子我们仅仅提供我们的HHTPBasicAuthHandler给build_opener。默认的openers有正常状况的handlers–ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor。
top_level_url 实际上可以是完整URL(包含”http:”,以及主机名及可选的端口号)例如:http://example.com/,也可以是一个“authority”(即主机名和可选的
包含端口号)例如:“example.com” or “example.com:8080”(后者包含了端口号)。权限验证,如果递交的话不能包含”用户信息”部分,例如:
“joe@password:example.com”是错误的。
Proxies代理urllib 将自动监测你的代理设置并使用他们。这个通过ProxyHandler这个在正常处理器链中的对象来处理。通常,那工作的很好。但有时不起作用
。其中一个方法便是安装我们自己的代理处理器ProxyHandler,并不定义代理。这个跟使用Basic Authentication 处理器很相似。
[python:nogutter]
>>> proxy_support = urllib.request.ProxyHandler({})
>>> opener = urllib.request.build_opener(proxy_support)
>>> urllib.request.install_opener(opener)
注意:
此时urllib.request不支持通过代理获取https地址。但,这个可以通过扩展urllib.request达到目的。
Sockets and Layers
Python支持获取网络资源是分层结构。urllib 使用http.client库,再调用socket库实现。
在Python2.3你可以指定socket的等待回应超时时间。这个在需要获取网页的应用程序里很有用。默认的socket模型没有超时和挂起。现在,socket超时没有暴露 www.2cto.com
给http.client或者urllib.request层。但你可以给所有的sockets设置全局的超时。
作者:lmh12506
python模块:win32com用法详解
1)安装
(2)处理word
使用技巧
import win32com
from win32com.client import Dispatch, constants
w = win32com.client.Dispatch(‘Word.Application’)
# 或者使用下面的方法,使用启动独立的进程:
# w = win32com.client.DispatchEx(‘Word.Application’)
# 后台运行,不显示,不警告
w.Visible = 0
w.DisplayAlerts = 0
# 打开新的文件
doc = w.Documents.Open( FileName = filenamein )
# worddoc = w.Documents.Add() # 创建新的文档
# 插入文字
myRange = doc.Range(0,0)
myRange.InsertBefore(‘Hello from Python!’)
# 使用样式
wordSel = myRange.Select()
wordSel.Style = constants.wdStyleHeading1
# 正文文字替换
w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)
# 页眉文字替换
w.ActiveDocument.Sections[0].Headers[0].Range.Find.ClearFormatting()
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Replacement.ClearFormatting()
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Execute(OldStr, False, False, False, False, False, True, 1, False, NewStr, 2)
# 表格操作
doc.Tables[0].Rows[0].Cells[0].Range.Text =’123123′
worddoc.Tables[0].Rows.Add() # 增加一行
# 转换为html
wc = win32com.client.constants
w.ActiveDocument.WebOptions.RelyOnCSS = 1
w.ActiveDocument.WebOptions.OptimizeForBrowser = 1
w.ActiveDocument.WebOptions.BrowserLevel = 0 # constants.wdBrowserLevelV4
w.ActiveDocument.WebOptions.OrganizeInFolder = 0
w.ActiveDocument.WebOptions.UseLongFileNames = 1
w.ActiveDocument.WebOptions.RelyOnVML = 0
w.ActiveDocument.WebOptions.AllowPNG = 1
w.ActiveDocument.SaveAs( FileName = filenameout, FileFormat = wc.wdFormatHTML )
# 打印
doc.PrintOut()
# 关闭
# doc.Close()
w.Documents.Close(wc.wdDoNotSaveChanges)
w.Quit()
(3)处理excel
[1]使用PyExcelerator读写EXCEL文件(Platform: Win,Unix-like)
优点:简单易用 缺点:不可改变已存在的EXCEL文件。
PyExcelerator是一个开源的MS Excel文件处理python包。它主要是用来写 Excel 文件.URL: http://sourceforge.net/projects/pyexcelerator/
我没有找到关于PyExcelerator的文档。只是看到了limodou的一篇介绍:http://www.2cto.com/kf/201206/137853.html
这个包使用起来还是比较简单的:)。带了很多小例子,可以参照。
例mini.py.
=================================
#!/usr/bin/env python
# -*- coding: windows-1251 -*-
# Copyright (C) 2005 Kiseliov Roman
__rev_id__ = “”"$Id: mini.py,v 1.3 2005/03/27 12:47:06 rvk Exp $”"”
“导入模块
from pyExcelerator import *
“生成一个工作薄
w = Workbook()
“加入一个Sheet
ws = w.add_sheet(‘Hey, Dude’)
“保存
w.save(‘mini.xls’)
=================================
[2]使用COM接口,直接操作EXCEL(只能在Win上)
优点:可以满足绝大数要求。缺点:有些麻烦。:-)
这方面的例子很多,GOOGLE 看吧:-). 文档也可以参看OFFICE自带的VBA EXCEL 帮助文件(VBAXL.CHM)。这里面讲述了EXCEL VBA的编程概念,
不错的教程!另外,《Python Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件,可以很容易的加以扩展。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from win32com.client import Dispatch
import win32com.client
class easyExcel:
“”"A utility to make it easier to get at Excel. Remembering
to save the data is your problem, as is error handling.
Operates on one workbook at a time.”"”
def __init__(self, filename=None):
self.xlApp = win32com.client.Dispatch(‘Excel.Application’)
if filename:
self.filename = filename
self.xlBook = self.xlApp.Workbooks.Open(filename)
else:
self.xlBook = self.xlApp.Workbooks.Add()
self.filename = ”
def save(self, newfilename=None):
if newfilename:
self.filename = newfilename
self.xlBook.SaveAs(newfilename)
else:
self.xlBook.Save()
def close(self):
self.xlBook.Close(SaveChanges=0)
del self.xlApp
def getCell(self, sheet, row, col):
“Get value of one cell”
sht = self.xlBook.Worksheets(sheet)
return sht.Cells(row, col).Value
def setCell(self, sheet, row, col, value):
“set value of one cell”
sht = self.xlBook.Worksheets(sheet)
sht.Cells(row, col).Value = value
def getRange(self, sheet, row1, col1, row2, col2):
“return a 2d array (i.e. tuple of tuples)”
sht = self.xlBook.Worksheets(sheet)
return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value
def addPicture(self, sheet, pictureName, Left, Top, Width, Height):
“Insert a picture in sheet”
sht = self.xlBook.Worksheets(sheet)
sht.Shapes.AddPicture(pictureName, 1, 1, Left, Top, Width, Height)
def cpSheet(self, before):
“copy sheet”
shts = self.xlBook.Worksheets
shts(1).Copy(None,shts(1))
“下面是一些测试代码。
if __name__ == “__main__”:
PNFILE = r’c:\screenshot.bmp’
xls = easyExcel(r’D:\test.xls’)
xls.addPicture(‘Sheet1′, PNFILE, 20,20,1000,1000)
xls.cpSheet(‘Sheet1′)
xls.save()
xls.close()
(4)python调用短信猫控件,发短信
#! /usr/bin/env python
#coding=gbk
import sys
import win32com.client
ocxname=’ShouYan_SmsGate61.Smsgate’
axocx=win32com.client.Dispatch(ocxname)
axocx.CommPort=8#设置COM端口号
axocx.SmsService=’+8613800100500′#设置短信服务号码
axocx.Settings=’9600,n,8,1′#设置com端口速度
axocx.sn=’loyin’
c=axocx.Connect(1)#连接短信猫或手机
print ‘连接情况’,axocx.Link()
axocx.SendSms(‘python确实是很好的’,’15101021000′,0)#发送短信
作者:木雨山
Python去除String中的空格/换行/回车等
join:在序列中添加元素
split: 将字符串分解成序列
两者为互逆方法
Python代码
s = “as, asdas \r\nasda”
print s.split();
# result: ['as,', 'asdas', 'asda']
print “”.join(s.split());
# result: as,asdasasda
l = “”.join(s.split()).split(‘,’);
print l;
# result: ['as', 'asdasasda']
免费学习编程的10个好工具
这个连小孩子都知道开发App的时代,编程是一项必学功能,没必要拿着枯燥的书本在那里死啃,而是即刻动手才能学得快。所以我们要来看看这些免费编程资源。
1. Code/Racer
Code/Racer 是一个在线编程游戏,会强迫你快速编程,在编程游戏中,Code/Racer所属Treehouse团队拥有超过650个教学视屏,当你完成某个课程的话,就会获得相应的徽章。
2. MIT OpenCourseWare
因为它开放了课程内容,所以每个人都可以从这个机构学到东西。这对于背负着沉重贷款的学生来说是非常美好的一件事。
3. Udacity
Udacity相信当今的高端教育系统被破坏了,教育不再是某个时间段的事情,而是终生的事情,所以它的教学内容里面包括了大量的计算机科学,数学和物理在线课程。
4. Mozilla Developer Network
这是一个搜集Web开发的公资料网站,里面有专家、学生。MDN是一个Wiki式网站,所以任何人都可以编辑和修改它的页面。
5. The CodePlayer
这里有互动演示文稿告诉你人们是如何从头构建事情的,在你变成一个编程员后,你也可以把自己一步一步的学习的演示文稿传上去,告诉别人你是怎么学习编程的。
6. Coursera
这个顶级在线教育平台有各个大学的在线资源,来自62个大学的教授老师等。而且支持英语、西班牙语、法语、意大利语和中文。
7. Codeacademy
Codeacadem只专注编程教学,包括APIs, Ruby, Python, JavaScript, jQuery, PHP,Web基础语言等。
8. Khan Academy
从编程到微积分,计算机科学理论,在这里你可以同时成为专业编码师和专业数学家。
9. Learn Python the Hard Way
该网站提供免费的PDF,如果需要视频课程的话,你需要支付29美元。在这里学习的时候, 你不能复制粘贴,只能一个一个字符输入。
10. HTML5 Rocks
这里是学习HTML 5的一站式教学,都是在Google、Adobe等工作的人写的,然后学生们通过幻灯片、演示文稿和视频来学习。
Via mashable
一位从月薪3500到1000万身家的学长对大一新生们的忠告
大一的学弟学妹,如果你是个上进、渴望成功的大学生,请你静下心来读完这篇文章。
刚刚脱离高考束缚的你,现在是不是觉得上了大学之后就可以放松了?是的,可以放松,但是只能适当放松…你想过从大一开始就走在别人前面吗?…你想过你的父母为了供你上学筹集高昂的学费和生活费的时候在拼命干农活、摆地摊、躲城管,甘为人下吗?他们对你的期望是希望你能有出息(当然,家庭条件很好的可以绕过)。
前言:个人的水平代表不了大学的水平,任何一所大学,上至清华北大等名牌高校,下至高职三本甚至民办高校,即使你能学到所在大学的百分之一,甚至千分之一,万分之一,你照样可以横行天下,所向披靡!同样,大学的档次也限制不了个人的发展,只要你是条龙,你在任何时间,任何地点都可以翻江倒海、吞云吐雾!
一个人能否取得成功,与大学无关,与专业无关,与老师无关,与周围的环境无关,起决定性作用的是自己的心态、自己的努力!所以,请记住三点:
第一,即使你是名牌大学、重点大学的学生,也没有什么了不起,它只代表你大学之前擅于考试,大学之大与你无关。
第二,即使你是二本大学、三本高职的学生,也不要气馁,在平凡的大学照样可以创造不平凡的成就,你不能以学校为荣,但学校将来会因你而出名!
第三,无论你是否喜欢你的专业,无论你的专业是热门还是冷门,都不要太在意,因为大学里学的专业课基本都用不到,专业与工作对口的很少!它需要更多的是你的综合素质以及不断学习的能力!
那么刚升入大学的学生,如何才能赢在起跑线上,为自己精彩完美的大学创造一个好的序幕呢?个人认为:
第一点、转变心态
从心理上、言行上要完成从高中生到大学生的转变。高中生以学习成绩定终身,大学则不然,它培养的是全能型综合素质的人才。成绩很重要,但只是一方面,大学只顾在专业课中考高分的学生都是片面的。高中时,老师言传身教,大学则全凭自学,老师上课是他的义务,你听不听不在他讨论范围之内,所以自己一定要主动学习。高中时大家都闷头学习,很少有展示自己才华的机会,但大学则不然,它要的是百家争鸣、百花齐放!大学是一个个性张扬的时代、是一个魅力展示的场所、是一个激情释放的空间、是一个才华彰溢的摇篮,所以大家要在大学阶段把自己百炼成钢!
第二点、熟悉环境
我建议大一的时候,不但要好好学习,还要海阔天空的“玩”,我大一曾经创下每周出去逛街五次左右的记录,为何呢?一是熟悉地理环境,二是把握商机为自己将来拉赞助或者兼职做铺垫。另外呢,校园里的各项事务也要去尝试一下,各个教学楼,各种设施,各种人群等等,总之,从宏观上争取对大学以及对大学所在的城市有一个大致的了解,这一切都为大二、大三的成长与腾飞相辅相成!
第三点、养成好的学习习惯
大一塑造的个性及养成的习惯可能会对你的一生都有影响,所以大一的时候一定要对自己严格要求,兵法有云:求上得中,求中得下,求下一无所得,如果大一的时候就自己放松,那么大三大四的时候人基本上也散了。具体来讲,首先、好好学习,不要逃课,还不是你逃课的时候,要不然大二、大三、大四你就没法过了,最好期中期末考试的时候取得好成绩并拿得奖学金;其次,多去图书馆看书,大一是你去图书馆看杂书最好的时机,因为大三大四的时候你要么忙着考研,要么忙着毕业,没有心情和时间来扩展知识面了。
四、以“王道”涉足“官场”
大学的学生干部没有什么了不起,我小到班长,大至学生会主席都做过,不要看得那么神秘,请客送礼这都是不登台面的小把式,歪门邪道不免贻笑大方!我给大家说的是以王道制之,所谓王道也就是正道,一句话:靠请客送礼取得的职位是没有含金量的,如果你能成为学生会、学生社团的中流砥柱,让它离不开你的时候,你就成功了!怎么解释呢?说的直白点:你做的事对学生会及学生社团很重要,不可或缺,但只有你能办的更好,或者是办的好的少数人之一,那么学生会就对你有依赖作用,这样你就很容易的进入并成为栋梁了!当然说起来容易,具体操作起来还要靠自己的悟性!
五、周末、假期多打工
大一学生的课余生活很丰富,特别是一些创业团队,是个很好的锻炼机会,他们提供给你的锻炼机会是对你们的成长及毕业后很管用的。平时在学生会干活最多的是大一,打工参加人数最多的也是大一,为什么呢?因为大一的学生“好忽悠”呗!那么此时作为大一的你就不要抱怨,不要觉得自己吃亏了,因为大家都是这么过来的,大学做兼职不能赚很多钱,但是你赚到的是经验,你不做,你的大学就缺少很多东西,所以只要自己喜欢,自己有时间,我建议你多去闯荡一下,不要害怕失败,大学犯的错误你有足够的时间和机会去改,毕业后就不行了!
六、多参加活动,把握自己的兴趣并找到自己的特长
大学的很多活动,都是大一大二的学生参加的最多,尤其是大一,占参加人数的一半以上,这个时候,形形色色的学生社团或创业团队在纳新,各种活动、比赛的海报贴爆了张贴栏,那么你要做的就是尽可能的去参加,不要怕失败!一是可以锻炼自己的社交能力,二是能通过比赛及活动等发现自己的兴趣爱好并使自己的特长更长!大学才刚刚开始,不要操之过急,只要这几点你能做扎实,大二、大三必是你腾飞之时。
一、学习篇
1、大一的第一个学期,你就挂科了,而且,这一挂,就是两科,其中一科还是英语,为了接下来的四级考试,你买回了《疯狂英语》、《星火英语》等资料书,下定决心来学习,结果只看完了第一、二页,还没看到第三页,书就扔到一边了。那我说你什么呢?一个现在
学习如此没有决心的人,将来又怎么会坚持事业呢?
2、整个学期,你准时准点的去上课,去自习,没有逃过一节课。我首先恭贺你,确实是个好学生。然而,我要告诉你的是,你这个样子,以后,不适合创业,而是适合工作,因为,创业是个很冒险的事,而且,时刻要面临着选择与放弃的挣扎。所以,大学里,对于不喜欢,不感兴趣的课,大胆的去逃吧。把这些时间用在去图书馆、去做兼职赚取工作经验等等。
3、大学伊始,你就为自己的大学四年作好了规划,时间允许的话,去参加一些创业团队的活动,去发发传单,尽量和外面的世界多多接触,尽量的给家里减轻一点经济负担。
二、学生会、社团、创业团队篇
4、你打算入学生会,带着精心的准备,满腔的激情和昂扬的斗志,参加竞选,如愿以偿的选上了,你兴奋不已,这时有师哥师姐偷偷告诉你,学生会的另外一面,黑暗、腐败、潜规则,你不屑,慢慢地,你感受到了,你面临着,要么被同化,要么被孤立。你就这样犹豫着,错失、抱怨,抱怨、错失,度过了大学四年,而没有勇气考虑第三个选择,退出。
5、刚上大一,你就加入了N个社团,然后走马灯似的奔波于一个个社团之间,最后,你惊奇的发现,最后社团换届选举的时候,那么多的社团,竟然没有一个人提名你。你总结后,才发现,自己应该只专注一个,而且最好是大社团,就足够了的。
刚上大一,看你的兴趣,想赚钱又想锻炼自己各方面的能力,创业团队是个不错的选择,但是,当你选择团队的时候也就选择了勤奋和上进,因为团队精神是不允许有懒散的。
三、恋爱篇
6、看身边有人恋爱了,你跟风似的,去稀里糊涂的恋爱了,看身边有人要考公务员,你继续跟风,去稀里糊涂的报名了,看身边有人要出国留学,你还是接着跟风。最后,看身边的人被猎头公司挖走了,跳槽去了一家大型外企,你想再跟风,才发现,这次不行了。你才意识到,大学四年,竟然没有学会,有自己的主见。
7、终于你决定,跟自己一直心仪的女孩子表白,却不想,人家婉言谢绝了,其实,你知道理由的,你太普通了。人家觉得,你配不上她。然后,你开始发愤图强、内外兼修,终于,拨云见雾的那一天到了,你成为了万众瞩目的那一个,走在路上,前拥后绕。这时,那个女孩子主动过来投怀送抱了,你竟然如获至宝,欣然接受。多可悲的一个人啊。
8、大学里,花了三年去等一个女孩子,然后,在大四的那一年,终于人家同意你了,你欢喜雀跃不已,却不想,刚过了一个星期,那个女孩就问你,是这个月搬出去住还是下个月?你瞠目结舌。才发现,这就是你三年来痴心一片的女孩。那么,接下来呢?华丽转身么?
9、你开始恋爱了,开始不屑于学校的食堂,流连于一个个的餐馆、西餐厅,开始觉得身上的衣服寒酸了,于是进出于一个个见诸报端、电视的的品牌,后来,你还索性搬出去住。可是,每个月卡上只有那可怜巴巴的几百元钱,你开始找朋友筹借,再对家里编谎,要考某某证书,要参加某某培训,以后好找工作,这成了你屡试不爽的一个好方法。
10、不要相信,所谓的某某女生多么堕落,随便和人家住旅馆了,要是找个还保留着第一次的女孩子,要到幼儿园排队,这种荒谬的流言。大学里懂得自爱的女孩子,很多,大学里漂亮且懂得自爱的女孩子,也非常多。我们班里,公认的最漂亮的一个女孩子,大学里连恋爱都没谈过。这样的女孩子,虽然不是比比皆是,但是,只要你用心发现,真的很多。
11、大学四年,你可以没有恋爱,不要为没有这份经历而觉得羞愧,难以启齿,因为,你会慢慢发现,这个社会,爱情,是多么廉价,婚姻,又是多么脆弱,好好珍惜你的第一份感情,深思熟虑后,找一个值得你终身托付的男子,去恋爱、结婚。他会一生都珍惜这份完整感情的,你也会幸福一辈子。如果,你是个感情专一的男人,你就会知道,大学里,一年里换上三次男朋友的女孩子,于男人来说,意味着什么。
四、生活篇
男生篇
12、刚上大学没多久,就迷上了网络游戏,于是,你在游戏中开始了昏天暗地的驰骋、厮杀,并且接二连三的打破了一个星期没有出宿舍楼、十天没有出宿舍楼、半个月没有出宿舍楼的记录。你知道,这是多么颓废吗?
13、你费尽周折,历经磨难,终于不负众望的学会了保皇、够级、麻将,从此,宿舍里不用为“三缺一”而四处去串门喊人了,而你,也在这一轮轮的洗牌和此起彼伏的麻将声中迷失了自己,浑浑噩噩的过完了这四年。
14、大学里,你学会了抽烟,理由是,一、宿舍里六个人三个抽烟的,不想抽二手烟,二、反正抽烟是早晚都要学会的事情,以后到了社会上,还指望着这个来应酬、拉关系呢,却不去想,你家里辛辛苦苦、起早贪黑的来供你学杂费、生活费,却让你这样在指间燃烬了。
女生篇
15、大三了,宿舍里的女生,要么准备考研,要么准备就业,只有你,还抱着一本饶雪漫、明晓溪读的津津有味,还没昼没夜守在电视前,一遍一遍的看《爱情公寓》、《非诚勿扰》。大三了,不是不可以幻想,只是,你要明白,这个世界,没有面包,怎么跳舞?
16、不要相信那些花花绿绿广告单上的化妆品,会让你皮肤多么细嫩、白皙,多么富有光泽、弹性。那是给那些四十多岁的阿姨、大妈们生产的。你只需要护发素、护手霜这种简单化妆品就行了。二十岁的时候,要想保养好你皮肤,只需做好一样,出门带伞。你要记住,青春的特色,是单纯,而不是浓艳,当然,更不是花哨。
五、兼职篇
17、你满心喜悦的找了一份兼职,结果累死累活了一天,你开始抱怨,下次再也不要过来干了,结果,发现门外排队等侯的人那么多,你还发现,还有人交了价值不菲的中介费,到了最后,赚回来的钱,还不抵交上去的中介费。于是,你觉得,这样的人更值得悲哀了。
18、你很容易就找到了大学里的第一份兼职,是去宿舍推销某英语报,你信心十足的去了,结果,发现敲了N次的门,吃了N次的闭门羹。然后,你很快又找到了第二份兼职,是去宿舍推销某化妆品,你再次信心十足的去了,结果,又是N次的闭门羹。恩,连我都为你悲哀了。为什么,一定要推销那种广告栏里铺天盖地,且价格上,大家都心照不宣的呢?而且,市场又是如此的混乱。你真的相信,凭一己之力,就可以整顿好这个市场吗?那么,团队的意义,又在哪里呢?
六、创业篇
19、如果,你下定决心,大学毕业后,就去创业的话,第一,在大学里的创业团队培养自己的创业精神及团队精神。第二,你知道自己擅长什么,缺乏什么,和什么样的人搭配,会成为一个团队,这种人,怎么去找。第三,准备你的商业策划书。目的是什么呢,理清思路。第四,找到启动资金。第五,不断学习。第六,坚持下去。
20、在一个行业领域里,做两年,你才能算是入门了。任何一个行业领域,都有他的规则、门道。如果,你能坚持在这里面,做上十年,你就是非常了不起的前辈人物了。而做任何事情,你都要有个准备,前两年,不赚钱。这样的项目,才是长远的,那种一卷而上,哄抢一通的事情,永远,长久不了。所以,你可以在大学里就开始这两年的摸门准备了。
21、创业,最初的需要,只是一个决心。决心来自于哪呢?来自于你平时的积累和认识,是不是这真的是一个千载难逢的机遇?那么,什么是机遇呢?如果你躺在床上,翻来覆去,睡不着,不是因为某个女生,不是因为某个物品,而是一个绝妙的Idea,你会为其中一点补充,而兴奋很久,你又会为其中一点不足,而沉思良久。你觉得,胸腔中,这个Idea,随时呼之欲出,腾空而起,随时准备爆发,井喷。它像是一团熊熊燃烧的火,已经没有谁可以浇灭了。那么,带着祝福和梦想,上路吧,朋友。
七、真理、法则篇
22、大学四年,如果你学会了这一件事,你以后的人生,会很快乐。那就是,不要抗拒事实,那些已经发生的,你就允许它存在好了。如果,已经发生了的事情,你还一味的排斥、抗拒,不承认、不接受,那无异于拿头撞墙,终究无济于事。而且,让自己很痛苦。
23、这个世间,最伟大而又最简洁的一个真理,舍得。你有怎样的舍,就会有怎样的得。很多时候,我们不是再做选择,而是在做放弃。就像是那些优秀的CEO们,他们也是在做放弃。放弃了那些沉重不堪的过去,不再去犹犹豫豫的判断,你才能飞的更快、更高。那么,现在开始,培养你敏锐的判断力吧。
24、相信这个世界上,有因果报应。不是让你相信宿命、轮回,而是要告诉你,在这个世界,种瓜得瓜,种豆得豆,你今天的这个样子,是你自己昨天选择的结果。你昨天有没有认真学习,有没有努力工作,才导致你今天的这个样子,站在哪里,又在和谁接触。所以,不要抱怨什么了,抓紧时间学习、工作吧,你肯定能收获到你想要的。
25、这个世界上,还存在着一个伟大的法则,适用于整个宇宙的伟Xxx则——吸引力法则,如果,你是积极向上的心态,那么,你吸引到的,也是同样的积极向上的事物,接触到的人,发生的事,就使他们所谓的“贵人”、“好运”,如果,你整天抱怨连连,那么,你真的会霉运不断。很难以理解,是么?说的通俗点,这个世界上,物以类聚。
26、运用好黄金法则,就是二八原则。百分之二十的事情,决定百分之八十的结果。百分之二十的消费者,带来百分之八十的收入。百分之二十的人,掌握百分之八十的财富。那么,权衡一下,你该怎么分配你的资源。运用好了这个二八原则,你真的会省很大精力、时间。
27、你要相信,每件事的发生,都是上天送给你的一件礼物。只是,有些礼物的包装,很丑陋,很难看。可能,让我们心生愤恨或者心存恐惧。给自己一点时间,给自己一份信心,再带着一份细心、一份耐心,慢慢的拆开一层层的包装。你会发现,这份礼物,会让你受益终身。
28、如果,你觉得上面的文字,对你有帮助,那么,转载一下,让更多的人,看到吧。因为在这个世界,你要相信,爱的力量。同时,给你的一个,如果可能,会改变你一生的忠告,如果你的大学,很迷茫,很无助,那么,关注一下,水月流萤。
希望以上对你是有用的,同时祝你学业有成,前程似锦!