filepath=r"E:\workpalce\Python\data\Andersen's_Fairy_Tales\100.txt"
f=file(filepath,mode='a+')
### 模式
f.mode
### 判断是否关闭
f.closed
### 编码
f.encoding
### 终端是否能访问
f.isatty()
f.fileno()
f.name
f.readline()
### 定位
f.tell()
### 移动位置,seek(offset,from=0) from =0 从开头,1,:当前位置,2:最后的位置
f.seek(10,1)
f.tell()
### 关闭
f.close()
import fileinput
for line in fileinput.input(filepath):
print line
fileinput.close()
1872
FAIRY TALES OF HANS CHRISTIAN ANDERSEN
THE SNOW QUEEN IN SEVEN STORIES
by Hans Christian Andersen
summer,- warm, beautiful summer
。。。。。。。。。。。
THE END
LastIndexNext
Written By Anderson
%ls -l -h E:\workpalce\Python\regular_python\ipython\data
驱动器 E 中的卷是 NewDisk
卷的序列号是 283B-5BA5
E:\workpalce\Python\regular_python\ipython 的目录
E:\workpalce\Python\regular_python\ipython 的目录
E:\workpalce\Python\regular_python\ipython\data 的目录
2016/09/25 10:54 .
2016/09/25 10:54 ..
2016/08/11 15:32 8,612 01.txt
2016/08/11 15:32 4,110 02.txt
2016/08/11 15:32 5,848 03.txt
2016/08/11 15:32 2,791 04.txt
2016/08/11 15:32 74,135 05.txt
2016/08/11 15:32 9,676 06.txt
2016/08/11 15:32 23,267 07.txt
...........
30 个文件 458,105 字节
2 个目录 92,106,444,800 可用字节
找不到文件
import os
files=r"E:\workpalce\Python\regular_python\ipython\data\\"
filepaths=[files+line for line in os.listdir(files)]
for line in fileinput.input(filepaths):
if fileinput.isfirstline():
print fileinput.filename()
fileinput.close()
E:\workpalce\Python\regular_python\ipython\data\\01.txt
E:\workpalce\Python\regular_python\ipython\data\\02.txt
E:\workpalce\Python\regular_python\ipython\data\\03.txt
E:\workpalce\Python\regular_python\ipython\data\\04.txt
E:\workpalce\Python\regular_python\ipython\data\\05.txt
E:\workpalce\Python\regular_python\ipython\data\\06.txt
E:\workpalce\Python\regular_python\ipython\data\\07.txt
python linecache模块读取文件
在python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
- linecache.getlines(filename)
从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以linenum-1为元素在列表中的位置存储- linecache.getline(filename,lineno)
从名为filename的文件中得到第lineno行。这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。
如果文件没有找到,这个函数将会在sys.path搜索。- linecache.clearcache()
清除缓存。如果你不再需要先前从getline()中得到的行- linecache.checkcache(filename)
检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。如果省略filename,将检查缓存里的所有条目。- linecache.updatecache(filename)
更新文件名为filename的缓存。如果filename文件更新了,使用这个函数可以更新linecache.getlines(filename)返回的列表。
import linecache
linecache_test=linecache.getline(filepath,lineno=8)
linecache.clearcache()
linecache_test
'You must attend to the commencement of this story, for when we get\n'
from itertools import *
count(5, 2) #从5开始的整数循环器,每次增加2,即5, 7, 9, 11, 13, 15 …
cycle(‘abc’) #重复序列的元素,既a, b, c, a, b, c …
repeat(1.2) #重复1.2,构成无穷循环器,即1.2, 1.2, 1.2, …
repeat也可以有一个次数限制:
repeat(10, 5) #重复10,共重复5次
Iterators terminating on the shortest input sequence:
- chain(p, q, …) –> p0, p1, … plast, q0, q1, …
- compress(data, selectors) –> (d[0] if s[0]), (d[1] if s[1]), …
- dropwhile(pred, seq) –> seq[n], seq[n+1], starting when pred fails
- groupby(iterable[, keyfunc]) –> sub-iterators grouped by value of keyfunc(v)
- ifilter(pred, seq) –> elements of seq where pred(elem) is True
- ifilterfalse(pred, seq) –> elements of seq where pred(elem) is False
- islice(seq, [start,] stop [, step]) –> elements from
seq[start:stop:step]- imap(fun, p, q, …) –> fun(p0, q0), fun(p1, q1), …
- starmap(fun, seq) –> fun(*seq[0]), fun(*seq[1]), …
- tee(it, n=2) –> (it1, it2 , … itn) splits one iterator into n
- takewhile(pred, seq) –> seq[0], seq[1], until pred fails
- izip(p, q, …) –> (p[0], q[0]), (p[1], q[1]), …
- izip_longest(p, q, …) –> (p[0], q[0]), (p[1], q[1]), …
Combinatoric generators:
- product(p, q, … [repeat=1]) –> cartesian product
- permutations(p[, r])
- combinations(p, r)
- combinations_with_replacement(p, r)
- groupby(iterable[, keyfunc]) -> create an iterator which returns
(key, sub-iterator) grouped by each value of key(value).
list(imap(pow,[1,2,3,4],[1,2,3,2]))
[1, 4, 27, 16]
list(ifilter(lambda x: x > 5, [2, 3, 5, 6, 7]))
[6, 7]
list(ifilterfalse(lambda x: x > 5, [2, 3, 5, 6, 7]))
[2, 3, 5]
list(izip(range(3),range(3,6),range(6,9)))
[(0, 3, 6), (1, 4, 7), (2, 5, 8)]
tee(range(10),2) ##将可迭代对象分成n个迭代器
(, )
chain([1, 2, 3], [4, 5, 7]) #将两个迭代器链接
product('abc', [1, 2]) # 多个循环器集合的笛卡尔积。相当于嵌套循环
permutations('abc', 2) # 从'abcd'中挑选两个元素,比如ab, bc, ... 将所有结果排序,返回为新的循环器。 排列
combinations('abc', 2) # 从'abcd'中挑选两个元素,比如ab, bc, ... 将所有结果排序,返回为新的循环器。 组合
combinations_with_replacement('abc', 2) # 与上面类似,但允许两次选出的元素重复。即多了aa, bb, cc
islice(range(10),3,7) ## 切片形成迭代器
将key函数作用于原循环器的各个元素。根据key函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。
这就好像一群人的身高作为循环器。我们可以使用这样一个key函数: 如果身高大于180,返回”tall”;如果身高底于160,返回”short”;中间的返回”middle”。最终,所有身高将分为三个循环器,即”tall”, “short”, “middle”
def height_class(h):
if h > 180:
return "tall"
elif h < 160:
return "short"
else:
return "middle"
friends = [191, 158, 159, 165, 170, 177, 181, 182, 190]
friends = sorted(friends, key = height_class)
for m, n in groupby(friends, key = height_class):
print(m)
print(list(n))
middle
[165, 170, 177]
short
[158, 159]
tall
[191, 181, 182, 190]
marhsal 序列化方式是直接对每个元素进行序列化,然而pickle对那些出现次数多于1的只序列化一次,所以在重复性较高的情况下pickle的序列化效果较好
list_=range(10)
import marshal
getmarshal=marshal.dumps(aa)
# print aa
# marshal.loads(aa)
len(getmarshal)
115
import pickle
rep_list_=list(repeat(list_,2))
len(pickle.dumps(rep_list_))
56