python檔案操作二

來源:互聯網
上載者:User

標籤:name   arc   sys.path   不同   glin   迴文   success   leo   []   

1、常用函數:

  1. fileObject.read([size])
    size為讀取的長度,以byte為單位。如果不指定參數,表示一次性讀取全部
    內容,以字串形式返回,並且每一行結尾會有一個"\n"符號。
    程式碼範例1:
    with open("text.txt","r") as pf:content = pf.read()print content

結果:
abcede
123
this is a test檔案操作jfedcba

程式碼範例2:

with open("text.txt","r") as pf:    content = pf.read(2)    print content

結果:
讀取:ab

  1. fileObject.readline( [size] )
    一行,如果給定了size,有可能返回的只是一行的一部分,以字串的形式返
    回,並且結尾會有一個分行符號"\n"。讀完一行,檔案操作標記移動到下一行的
    開頭
    列題1
with open("text.txt","r") as pf:    content = pf.readline()    print content

結果:
大學之道,在明明德,在親民,在止於至善。
列題 1:

with open("text.txt","r") as pf:    content = pf.readline(15)    print content

結果:
大學之道,

  1. fileObject.readlines( [size] )
    把檔案每一行作為一個list的一個成員,是一個字串,並且結尾會一個分行符號"\n",並返回這個list。這個函數的內部是通過迴圈調用readline()來實現的。如果指定了size參數,表示讀取檔案指定內容的長度,此時就有可能只能讀取檔案的一部分
with open("text.txt","r") as pf:    content = pf.readlines()    print content    for line in content:        print line

結果:

  1. fileObject.write( str )
    把str寫到檔案中,預設是不加分行符號的,所以如果想換行的話,得手動加入分行符號‘
with open("test.txt","w") as pf:    pf.write("我是最幫的!!\n學習檔案寫入操作")

結果:
我是最幫的!!
學習檔案寫入操作

  1. fileObject.writelines( seq )
    把seq(序列)的內容全部寫到檔案中(多行一次性寫入)。也不會自動加入分行符號
    如:
content = "我是最幫的!!\n學習檔案寫入操作,加油!!!"with open("test.txt","a") as pf:    pf.writelines(content)

結果:
我是最幫的!!
學習檔案寫入操作我是最幫的!!
學習檔案寫入操作,加油!!!

  1. fileObject.close()
    File 對象的 close()方法重新整理緩衝區裡任何還沒寫入的資訊,並關閉該檔案,這之後便不能再進行寫入。當一個檔案對象的引用被重新指定給另一個檔案時,Python 會關閉之前的檔案。用 close()方法關閉檔案是一個很好的習慣。如果檔案關閉後,還對檔案進行操作就會產生ValueError錯誤,但如果不及時關閉檔案,有可能產生句
    柄泄露,遺失資料
    #開啟檔案準備寫檔案
fp = open( "c:\\test.txt",‘w‘)print u"檔案名稱:", fp.name#關閉檔案fp.close()print u"檔案是否關閉:", fp.closed

結果:
檔案名稱: test.txt
檔案是否關閉: True

  1. fileObject.flush()
    該函數是將緩衝區中的內容寫入硬碟

  2. fileObject.tell()
    返迴文件操作標記的當前位置,以檔案的開頭為基準點
with open("test.txt","r") as pf:    print u"當前檔案操作標記位置為:", pf.tell()    line = pf.readline()    print u"讀取一行後檔案操作標記位置為:", pf.tell()

結果:
當前檔案操作標記位置為: 0
讀取一行後檔案操作標記位置為: 23

  1. fileObject.seek( offset[, from ] )
    tell()方法告訴你檔案內的當前位置;換句話說,下一次的讀寫會發生在檔案開頭這麼多位元組之後。seek(offset [,from])這是一個檔案定位函數,該方法改變當前檔案的位置。 Offset變數表示要移動的位元組數。From變數指定開始移動位元組的參考位置。如果from被設為0(預設值),這意味著將檔案的開頭作為移動位元組的參考位置。如果設為1,則使用當前的位置作為參考位置。如果它被設為2,那麼該檔案的末尾將為參考位置。需要注意,如果檔案以a或a+的模式開啟,每次進行寫操作時,檔案操作標記會自動返回到檔案末尾。測試檔案test.txt,內容如下:
with open("test.txt","r") as fp:    str = fp.read(18)    print u"讀取的字串是 : ", str    # 尋找當前位置    position = fp.tell()    print u"當前檔案位置 : ", position    # 把指標再次重新置放到檔案開頭    position = fp.seek(0, 0)    str = fp.read(18)    print u"重新讀取字串 : ", str

結果:
讀取的字串是 : 我是最幫的!
當前檔案位置 : 18
重新讀取字串 : 我是最幫的!

fileObject.truncate( [size] )
把檔案裁成規定的大小,預設的是裁到當前檔案操作標記的位置。如果size比件的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些隨機的內容加上去。

with open("test.txt","r") as fp:    print "Name of the file: ", fp.name    line = fp.readline()    print "Read Line: %s" % (line)    print fp.tell()    # Try to read file now    remainingLine = fp.readline()    print "Read Line: %s" % (remainingLine)
  • 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)
    返回的列表。如果出錯,則返回空列表。

    1. 刪除空行的方法
    fp = open(r‘test.txt‘)    aList = []    for item in fp:        if item.strip():            aList.append(item)    fp.close()    fp = open(r‘test2.txt‘, ‘w‘)    fp.writelines(aList)
def delblankline(infile, outfile):    """ Delete blanklines of infile """    infp = open(infile, "r")    outfp = open(outfile, "w")    lines = infp.readlines()    for li in lines:    if li==‘\n‘: #不同作業系統下可能會有不同    print u‘空行‘    if li.split():        outfp.write(li)    infp.close()    outfp.close()if __name__ == "__main__":delblankline("c:\\1.txt","c:\\2.txt")

列題:
資料檔案:data.log
20160215 000148|0|collect info job start|success|
20160215000153|0|collect info job
end|success|resultcode = 0000
20160216000120|0|collect info job start|success|
20160216000121|0|collect info job
end|success|resultcode = 0000
20160217000139|0|collect info job start|success|
20160217000143|0|collect info job
end|success|resultcode = 0000
資料分析需求:
每行內容需要產生以每行
首年月日為名稱的檔案,
檔案內容寫入|0|後的所有
行內容(也包括|0| )

演算法分析:
遍曆每一行,每行取頭8個字母
建立檔案,檔案名稱為首8個字母,然後把第15字元後的所有字
符拷貝到檔案中
關閉檔案

fp =open("e:\\data.log")for line in fp.readlines():    filename = line[:14]    content = line[14:]    with open("e:\\"+filename+".txt","w") as fp2:        fp2.write(content+"\n")fp.close()

python檔案操作二

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.