1、r 打开只读文件,该文件必须存在。
2、r+ 打开可读写的文件,该文件必须存在。
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
4、w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
7、上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。
with open("1.txt") as ifile:
for line in ifile:
tokens = line.strip().split(' ')
data.append([float(tk) for tk in tokens[:-1]])
labels.append(tokens[-1])
"""
关于read()方法:
1、读取整个文件,将文件内容放到一个字符串变量中
2、如果文件大于可用内存,不可能使用这种处理
"""
file_object = open("test.py",'r') #创建一个文件对象,也是一个可迭代对象
try:
all_the_text = file_object.read() #结果为str类型
print type(all_the_text)
print "all_the_text=",all_the_text
finally:
file_object.close()
"""
关于readline()方法:
1、readline()每次读取一行,比readlines()慢得多
2、readline()返回的是一个字符串对象,保存当前行的内容
"""
file_object1 = open("test.py",'r')
try:
while True:
line = file_object1.readline()
if line:
print "line=",line
else:
break
finally:
file_object1.close()
"""
关于readlines()方法:
1、一次性读取整个文件。
2、自动将文件内容分析成一个行的列表。
"""
file_object2 = open("test.py",'r')
try:
lines = file_object2.readlines()
print "type(lines)=",type(lines) #type(lines)= <type 'list'>
for line in lines:
print "line=",line
finally:
file_object2.close()
#将变量输出到文件
d = dict(name='Bob', age=20, score=88)
f=open('output','w')
f.write(str(d))
f.close()
序列化
try:
import cPickle as pickle
except ImportError:
import pickle
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()
反序列化
f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
JSON序列化
import json
json.dumps(d)
JSON反序列化
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
json.loads(json_str) #=> {u'age': 20, u'score': 88, u'name': u'Bob'}
#静态检查
#检查错误: 如"缩进错误", "少些了冒号", "变量不存在", "实例方法定义未包含self参数", "函数传参数量不对"等等
#检查代码风格: 如"代码单行字符数过多"等等
pylint example.py
#调试
from pudb import set_trace; set_trace()
import pudb; pu.db
pudb example.py
#Add Watch Expression
#变量区 按 n
#查找帮助
print help(xrange)
#if条件表达式
'result1' if 3>2 else 'result2'
#函数
#自变量list,输出函数结果list
[fun(x) for x in range(lower, upper) if x > a ]
{x: x ** 2 for x in range(5)} # => {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
#引进包
from math import ceil, floor
import math as m
#提高运行效率
def double_numbers_generator(iterable):
for i in iterable:
yield i + i
for value in double_numbers_generator(xrange(1000000)):
print value
if value > 5:
break
#当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Python的程序有两种退出方式:
import sys;sys.exit()调用后会引发SystemExit异常,可以捕获此异常做清理工作
import os;os._exit()直接将python解释器退出,余下的语句不会执行。
一般情况下用sys.exit(),一般在fork出来的子进程中使用os._exit()
win下安装python包,以feerparser为例
1、安装setuptools
2、下载feerparser:https://pypi.python.org/pypi/feedparser
3、打开feedparser目录下的setup.py,用from distutils.core import setup替代第一行的from setuptools import setup
4、在cmd中切换目录至feedparser,输入python setup.py install
pip install mapnik2 -i https://pypi.tuna.tsinghua.edu.cn/simple
linux下安装python包,以feerparser为例
wget https://pypi.python.org/packages/source/f/feedparser/feedparser-5.1.3.tar.gz
tar zxf feedparser-5.1.3.tar.gz
cd feedparser-5.1.3
python setup.py install
#变量类型
type(('1', 'a')) #tuple
isinstance(('1', 'a'), tuple) #True
# Strings
# 连接
"Hello " + "world!"
"Hello " "world!"
'_'.join(map(str, [1, 2, 3]))
# 翻倍
"Hello" * 3
# 格式化
"The items in the basket are %s and %s" % ('apple', 'lemon')
"{} is a {}".format("This", "placeholder")
"{0} can be {1}".format("strings", "formatted")
"{name} wants to eat {food}".format(name="Bob", food="lasagna")
# Lists
li = [1, 2, 3]
# 末位添加
li.append(4)
# 在指定位置k插入元素'a'
li.insert(k, 'a')
# 末位删除
li.pop()
# 删除第k项
del li[k]
# 删除第一个元素'a'
li.remove('a')
# 倒数第一项
li.[-1]
# 查找元素
li.index('a')
# 选中序列
li[start:end:step]
# 连接,两者不变
li + other_li
# 列表扩展
li.extend(other_li)
#列表生成式 List Comprehensions
[m + n for m in 'ABC' for n in 'XYZ'] # => ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#列表求交集
tmp = [val for val in Li1 if val in Li2]
#列表求差集
list(set(Li1).difference(set(Li2)))
#list排序
reverse() #倒序
sort() #升序
b = sorted(a) #a不变,b已排序
#通过序列切片来逆转
mytuple=(5,4,3,2,1)
mytuple[::-1] #=>(1, 2, 3, 4, 5)
#list去重
reduce(lambda x,y:x if y in x else x + [y], [[],]+mylist)
#list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈
from collections import deque
q = deque(['a', 'b', 'c'])
q.popleft() # => ['b', 'c']
q.appendleft('y') # => ['y','b', 'c']
#Tuple与list相似,但元素固定
tup = (1, 2, 3)
#定义1个元素的Tuple
t = (1,)
#namedtuple定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
isinstance(p, tuple) # => True
# Dictionaries
s = dict([(i,2*i) for i in range(5)])
# => {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
filled_dict = {"one": 1, "two": 2, "three": 3}
# => {'three': 3, 'two': 2, 'one': 1}
# 查找key对应的value
filled_dict["four"] # KeyError
filled_dict.get("four") # None
#赋值
filled_dict["four"] = 4
# 列举keys
filled_dict.keys() # => ["three", "two", "one"]
# 列举values
filled_dict.values() # => [3, 2, 1]
# 列举条目
filled_dict.items() # => [("one", 1), ("two", 2), ("three", 3)]
#设置默认值,如果键不存在,将会添加键并将值设为默认值。
dict.setdefault(key, default=None) #如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。
#defaultdict如果key不存在时,返回一个默认值
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key2'] # => 'N/A'
#OrderedDict保持Key的顺序,键值对是按照加入时的顺序存储
from collections import OrderedDict
dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
#按key排序
kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
#=>OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
#按照value排序
vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
#=>OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
#move_to_end(key, last=True)函数来改变键值对的位置,True时移到末尾,False移到开头
vd.move_to_end('orange')
#=>OrderedDict([('pear', 1), ('banana', 3), ('apple', 4), ('orange', 2)])
#popitem(),返回最后一个键值对,如果popitem(last=False)则先加入的先弹出
# Sets
some_set = set([1, 2, 2, 3, 4]) # some_set is now set([1, 2, 3, 4])
# 添加
some_set.add(5)
# 删除
some_set.discard(2)
# 交集
filled_set & other_set
# 并集
filled_set | other_set
# 差集
{1, 2, 3, 4} - {2, 3, 5} # => {1, 4}
# 对称差集
{1, 2, 3, 4} ^ {2, 3, 5} # => {1, 4, 5}
# 大小
len(some_set)
str(n) #数字转字符串
int(s) #字符串转整数
string.atoi(s,[base]) #字符串转整数, base为进制基数
string.atof(s) #字符串转浮点数
#将Unicode转换成普通的Python字符串
unicodestring = u"Hello world"
utf8string = unicodestring.encode("utf-8")
plainstring = unicode(utf8string, "utf-8")
调试
https://www.zhihu.com/question/21572891
程序计时
http://blog.sina.com.cn/s/blog_6163bdeb0101806e.html
from time import clock
t = clock() #在win32系统下,返回真实时间;在Unix/Linux下返回CPU时间。
s = solvepackage(vol,val,cap)
print 'time:%.2fs' % (clock()-t)
zip函数
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
#[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
u = zip(*xyz)
#[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
#zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
#nan变量
a = float('nan') #创建
math.isnan(a) #判断
#win pip换源
#https://blog.csdn.net/lwgkzl/article/details/80935453
#C盘用户文件夹,新建pip目录,新建pip.ini
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
[install]
trusted-host=pypi.doubanio.com