python文件操作二

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

結果:
python文件操作二

  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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章