Pythonファイル操作
12064 ワード
Fileモジュールドキュメント
fileinputモジュール
fileinput.input (files=None, inplace=False, backup=”, bufsize=0, mode=’r’, openhook=None) files:ファイルのパスリスト、デフォルトはstdin方式、マルチファイル[‘1.txt’,’2.txt’,...] inplace:標準出力の結果をファイルに戻すかどうか、デフォルトでは に置き換えられません. backup:バックアップファイルの拡張子.拡張子のみを指定します.bak.ファイルのバックアップファイルが既に存在する場合は、自動的に上書きされます. bufsize:バッファサイズ、デフォルトは0です.ファイルが大きい場合は、このパラメータを変更できます.一般的にデフォルトは です. mode:読み書きモード、デフォルトは読み取り専用 openhook:このフックは、開いているすべてのファイル、例えば符号化方式などを制御するために使用される.
一般的な関数 fileinput.input()#は、forループループループに使用できるオブジェクト を返す. fileinput.filename()は、現在のファイルの名前 を返します. fileinput.lineno()#は、現在読み込まれているローの数(またはシーケンス番号) を返します. fileinput.Filelineno()#は、現在読み込まれている行の行番号 を返します. fileinput.isfirstline()#現在の行がファイルの最初の行であるかどうかを確認する fileinput.isstdin()は、最後の行がstdinから を読み出すか否かを判断する. fileinput.close()クローズキュー
fileinputを使用してマルチファイルを操作し、その場で内容を変更します.
python linecacheモジュールでファイルを読み込む方法を詳しく説明します
python linecacheモジュール読み取りファイルpythonには、任意のファイルから任意のローを取得し、キャッシュを使用して最適化できる使いやすいモジュールlinecacheがあります.一般的には、単一のファイルから複数のローを読み込むことができます. linecache.getlines(filename)はfilenameという名前のファイルからすべての内容を取得し、出力はリスト形式であり、ファイルの各動作リストの要素であり、linenum-1を要素としてリストの位置に を格納する. linecache.getline(filename,lineno)filenameというファイルからlineno行目を取得します.この関数は例外を放出しません.エラーが発生した場合に返されます」(改行は見つかった行に含まれます).ファイルが見つからない場合、この関数はsysになります.path検索. linecache.clearcache()キャッシュをクリアします.以前getline()から得られた行 が不要になった場合 linecache.checkcache(filename)キャッシュの有効性を確認します.キャッシュ内のファイルがハードディスク(HDD)で変化し、バージョンを更新する必要がある場合は、この関数を使用します.filenameを省略すると、キャッシュ内のすべてのエントリがチェックされます. linecache.updatecache(filename)ファイル名のfilenameのキャッシュを更新します.filenameファイルが更新された場合、この関数を使用してlinecacheを更新できます.getlines(filename)が返すリスト.
itertools構造反復器 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).
key関数を元のループの各要素に作用します.key関数の結果に基づいて、同じ関数の結果を持つ要素を新しいループに分けます.各新しいループは、関数の結果をラベルとして返します.
これはまるで人の身長が循環器として使われているようだ.身長が180より大きい場合は「tall」を返すkey関数を使用できます.身長が160以下なら「short」に戻る.中間の戻り値「middle」.最終的に、すべての身長は3つの循環器、すなわち「tall」、「short」、「middle」に分けられる.
persistenceシーケンス化
marhsalシーケンス化方式は、各要素を直接シーケンス化するが、pickleは、出現回数が1より多いものに対して1回のみシーケンス化するので、重複性が高い場合にpickleのシーケンス化効果が高い
marshal
pickle,cPickle
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()
fileinputモジュール
import fileinput
fileinput.input (files=None, inplace=False, backup=”, bufsize=0, mode=’r’, openhook=None)
一般的な関数
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)]
fileinputを使用してマルチファイルを操作し、その場で内容を変更します.
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モジュール読み取りファイルpythonには、任意のファイルから任意のローを取得し、キャッシュを使用して最適化できる使いやすいモジュールlinecacheがあります.一般的には、単一のファイルから複数のローを読み込むことができます.
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
'
itertools構造反復器
from itertools import *
Combinatoric generators:
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関数の結果に基づいて、同じ関数の結果を持つ要素を新しいループに分けます.各新しいループは、関数の結果をラベルとして返します.
これはまるで人の身長が循環器として使われているようだ.身長が180より大きい場合は「tall」を返すkey関数を使用できます.身長が160以下なら「short」に戻る.中間の戻り値「middle」.最終的に、すべての身長は3つの循環器、すなわち「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]
persistenceシーケンス化
marhsalシーケンス化方式は、各要素を直接シーケンス化するが、pickleは、出現回数が1より多いものに対して1回のみシーケンス化するので、重複性が高い場合にpickleのシーケンス化効果が高い
marshal
list_=range(10)
import marshal
getmarshal=marshal.dumps(aa)
# print aa
# marshal.loads(aa)
len(getmarshal)
115
pickle,cPickle
import pickle
rep_list_=list(repeat(list_,2))
len(pickle.dumps(rep_list_))
56