Pythonファイル操作

12064 ワード

Fileモジュールドキュメント
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)
  • 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()クローズキュー
  • 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があります.一般的には、単一のファイルから複数のローを読み込むことができます.
  • 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)が返すリスト.
  • 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 * 
  • 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関数の結果に基づいて、同じ関数の結果を持つ要素を新しいループに分けます.各新しいループは、関数の結果をラベルとして返します.
    これはまるで人の身長が循環器として使われているようだ.身長が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