1. 程式人生 > >Python——檔案處理

Python——檔案處理

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys, os, zipfile, tempfile, tarfile, fnmatch;

def read_file(fileName):
    '''
    read file and print file line count
    '''
    f = open(fileName, 'r')
    try:
        line_list = f.readlines()
        #read file each line without '\n'
        #line_list = f.read().splitlines()
        #line_list = f.read().split('\n')
        #line_list = [L.rstrip('\n') for L in f.readlines()]
        print len(line_list)
    finally:
        f.close()

def read_file_by_chunks(fileName, chunksize=100):
    file_object = open(fileName, 'rb')
    while True:
        chunk = file_object.read(chunksize)
        if not chunk:
            break;
        yield chunk
    file_object.close()

def search_replace_text_infile(stext='', rtext='', input_file=sys.stdin, output_file=sys.stdout):
    if isinstance(input_file, basestring):
        ifile = open(input_file, 'r')
    else:
        ifile = input_file
    
    if isinstance(output_file, basestring):
        ofile = open(output_file, 'w')
    else:
        ofile = output_file
    
    for s in ifile:
        ofile.write(s.replace(stext, rtext))
    
    if isinstance(ifile, basestring):
        ifile.close()
    if isinstance(ofile, basestring):
        ofile.close()
    
def getline(filename, desired_line_number):
    if desired_line_number < 1:
        return ''
    
    for current_line, line in enumerate(open(filename, 'rU')):
        if desired_line_number-1 == current_line:
            return line.rstrip('\n')

    return ''

def linecount_w(filename):
    sys_cmd = 'wc -l ' + filename
    return int(os.popen(sys_cmd).read().split()[0])
    
def linecount_1(filename):
    return len(open(filename, 'r').readlines())
    
def linecount_2(filename):
    linecount = -1
    for linecount, line in enumerate(open(filename, 'r')):
        pass
    return linecount+1

def linecount_3(filename):
    linecount = 0
    f = open(filename, 'r')
    while True:
        chunk = f.read(65535)
        if not chunk:
            break
        linecount += chunk.count('\n')
    return linecount

def words_of_file_in_firstline(filename, line_to_words=str.split):
    firstline = getline(filename, 1)
    for word in line_to_words(firstline):
        yield word
    

def read_from_zip_file(filename):
    zipf = zipfile.ZipFile(filename, 'r')
    for fname in zipf.namelist():
        bytes = zipf.read(fname)
        print 'File %s in %s has %d bytes' % (fname, filename, len(bytes))
    zipf.close()

def just_for_fun():
    #create a temp file with zip suffix
    handle, tmpFileName = tempfile.mkstemp('.zip')
    os.close(handle)
    
    #open temp zip file
    tmpZfile = zipfile.ZipFile(tmpFileName, 'w')
    #write something to temp zip file
    #paremeter 1:the name of the file in temp file
    #parameter 2:The file contents is the string 'bytes'
    tmpZfile.writestr('hello.py', 'def f(): \
                                        return "hello world from " + __file__\n')
    tmpZfile.close()
    #set python module search path
    #put temp zip file into first one
    sys.path.insert(0, tmpFileName)
    #import 'hello' module
    import hello
    #call hello module's f function
    print hello.f()
    os.unlink(tmpFileName)
    
try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO
class ZipString(zipfile.ZipFile):
    '''
    read zip file content from a string
    '''
    def __init__(self, dataString):
        zipfile.ZipFile.__init__(self, StringIO(dataString))

def make_tar(source_folder, dest_folder, compression='bz2'):
    if compression:
        file_ext = '.' + compression
        compressionPara = ':' + compression
    else:
        file_ext = ''
        compressionPara = ''
    
    arcname = os.path.basename(source_folder)
    dest_file = "%s.tar%s" % (arcname, file_ext)
    dest_path = os.path.join(dest_folder, dest_file)
    
    out = tarfile.TarFile.open(dest_path, 'w'+compressionPara)
    out.add(source_folder, arcname)
    out.close()
    return dest_path

CHUNK_SIZE = 16 * 1024
def adapte_file(fileObj):
    '''
    use file-like object to adapte a real file object
    '''
    if isinstance(fileObj, file):
        return fileObj
    
    tmpFileObj = tempfile.TemporaryFile()
    while True:
        data = fileObj.read(CHUNK_SIZE)
        if not data:
            break
        tmpFileObj.write(data)
    
    fileObj.close()
    tmpFileObj.seek(0)
    return tmpFileObj

def all_files(rootPath, patterns='*', single_level=False):
    patterns = patterns.split(';')
    for path, dirs, files in os.walk(rootPath):
        files.sort()
        for file in files:
            for pattern in patterns:
                #test whether filename matchs pattern
                if fnmatch.fnmatch(file, pattern):
                    yield os.path.join(path, file)
                    break
        if single_level:
            break

def swapextensions(rootPath, before, after):
    if before[:1] != '.':
        before = '.' + before
    extLen = -len(before)
    if after[:1] != '.':
        after = '.' + after
    
    swapCount = 0
    for path, dirs, files in os.walk(rootPath):
        for file in files:
            if file[extLen:] == before:
                oldfile = os.path.join(path, file)
                newfile = oldfile[:extLen] + after
                os.rename(oldfile, newfile)
                swapCount += 1
    return swapCount

def search_file(filename, searchPath, pathsep=os.pathsep):
    for path in searchPath.split(pathsep):
        candidate = os.path.join(path, filename)
        if os.path.isfile(candidate):
            return os.path.abspath(candidate)

def addPythonSearchPath(newPath):
    '''
    add new path to module search path of python
    return:
    1  -  success
    0  -  added path already on sys.path
    -1 -  added path doesn't exist
    '''
    if not os.path.exists(newPath):
        return -1
    newPath = os.path.abspath(newPath)
    
    if sys.platform == 'win32':
        newPath = newPath.lower()
    for searchPath in sys.path:
        searchPath = os.path.abspath(searchPath)
        if sys.platform == 'win32':
            searchPath = searchPath.lower()
        else:
            if newPath in (searchPath, searchPath + os.sep):
                return 0
    
    sys.path.append(newPath)
    return 1

if __name__ == '__main__':
    read_file('apache_log')
    
    totalbytes = 0
    for chunk in read_file_by_chunks('twittericon.png'):
        totalbytes += len(chunk)
    print 'twittericon.png file size is %d bytes' % totalbytes
    
    #search_replace_text_infile('who', '***')
    
    desired_line_number = 1
    print 'The %d line in "apache_log" is "%s"' % (desired_line_number, getline('apache_log', desired_line_number))
    
    import linecache
    #also relate clearcache, checkcache
    print 'The %d line in "sample.txt" is "%s"' % (desired_line_number, linecache.getline('sample.txt', desired_line_number).rstrip('\n'))
    
    for f in linecount_w, linecount_1, linecount_2, linecount_3:
        print f.__name__, f('apache_log')
        
    wordlist = []
    for word in words_of_file_in_firstline('apache_log'):
        #revert each word
        wordlist.append(word[::-1])
    print ' '.join(wordlist)
    
    read_from_zip_file('Archive.zip')
    
    just_for_fun()
    
    #print make_tar('./OCP', '.')
    
    for path in all_files('./OCP', '*.py'):
        print path
        
    path = './OCP'
    before = 'html'
    after = 'htm'
    print 'the count of swap extensions from %s to %s at path "%s" is %d' % (before, after, path, swapextensions(path, before, after))
    
    searchpath = '/bin' + os.pathsep + '/usr/bin'
    find_file = search_file('ls', searchpath)
    if find_file:
        print 'File "ls" found at %s.' % find_file
    else:
        print 'File "ls" not found.'
    
    print 'origin search path:'
    for x in sys.path:
        print x
    print "add new path to module search path of python, result:%d" % addPythonSearchPath('./OCP')
    print 'New search path:'
    for x in sys.path:
        print x


相關推薦

python檔案處理、路徑處理、序列化和反序列化

檔案IO常用操作 一般說IO操作,指的是檔案IO,如果指的是網路IO,會直接說。 把檔案儲存到磁碟上的這個過程,叫做落地。 column column open 開啟

python 檔案處理

一、概述 資料的儲存可以使用資料庫,也可以使用檔案。 資料庫保持了資料的完整性和關聯性,且使用資料更安全、可靠。使用檔案儲存資料則非常簡單、易用,不必安裝資料庫管理系統等執行環境。 檔案通常用於儲存應用軟體的引數或臨時性資料,是一個命名的位元集合,儲存在硬碟、U盤、快閃

Python檔案處理

檔案開啟方式: ‘r’ 以只讀的方式開啟檔案,檔案的描述符放在檔案的開頭。 ‘rb’ 以二進位制格式開啟一個檔案用於只讀,檔案的描述符放在檔案的開頭。 ‘r+’ 開啟一個檔案用於讀寫,檔案的描述符放在檔案的開頭。 ‘w’ 開啟一個檔案只用於寫入,若該檔案已經存在

python檔案處理

一、檔案處理流程 1、開啟檔案,得到檔案控制代碼並賦值 2、通過控制代碼對檔案進行操作 3、關閉檔案   二、檔案開啟模式 1、r,只讀,預設模式 2、w,只寫 3、a,追加 4、 r+、w+、x+、a+ ,可讀可寫 ## 模式 r—只讀 預設只讀 f = op

python 檔案處理(基礎字元)

基於字元read & write 最基本的檔案操作當然就是在檔案中讀寫資料。這也是很容易掌握的。現在開啟一個檔案以進行寫操作: 1. fileHandle = open ( 'test.txt', 'w' ) fileHandle = open ( 'test.txt', 'w' ) ‘w'是

Python——檔案處理

#!/usr/bin/env python # -*- coding:utf-8 -*- import sys, os, zipfile, tempfile, tarfile, fnmatch; def read_file(fileName): '''

Python檔案處理和Numpy陣列處理

1.Numpy陣列操作 以zeros為例,建立3行1列的x,y,型別為64位浮點,即double from numpy import zeros x = zeros((3,1),dtype =

Python -- 檔案處理

1.檔案讀寫 f=open(path,’r’)返回物件為file-like object 寫入時,沒有這個檔案時,自動建立 有的話,自動覆蓋這個檔案 2.讀寫的中文支援 import codecs f=codecs.open(filename,mod

python檔案處理,b模式的讀寫,rb, wb,編碼的兩種方式

字串轉二進位制的辦法 bytes(字串,encoding='編碼') 字串.encode('編碼') 主要通過這兩種辦法可以讓字串轉為bytes型別 為什麼要用二進位制的讀寫? 因為圖片視訊不是字串方式能顯示的,所以只能用b的方式來. 另外二進位制資料可以跨

python檔案處理時的問題:split函式,input函式

檔案操作目的:對檔案中的對話內容進行分割,把買家和客戶的談話內容分別儲存在不同的檔案中,但是去掉談話物件。遇到如下問題: 程式程式碼如下: 使用字串的split時,報錯 錯誤內容:這個函式需要至少一個值。 讀取的檔案是: 在split函式中

Python —— 檔案處理

1. 開啟檔案 open(filename, mode, buffering) mode=‘r’:以只讀模式開啟檔案。若此檔案不存在,報錯 mode=‘w’:以寫模式開啟。若此檔案不存在,則建立一個;若此檔案已存在,則先清空 mode=‘a’:以追加

python 檔案處理

python中對檔案、資料夾的操作需要涉及到os模組和shutil模組。 建立檔案: 1) os.mknod(“test.txt”) 建立空檔案 2) open(“test.txt”,w) 直接開啟一個檔案,如果檔案不存在則建立檔案 建立目錄: o

Python檔案處理(1)

讀取檔案 解決方案: 最簡單的就是一次性讀取所有的內容放在一個大字串中  all_the_text=open('thefile.txt').read() all_the_data=open('abinfile','rb').read() 為了安全起見,最好將開啟的檔案物件

Python檔案&IO處理技巧(1): 讀寫、重定向、間隔符、路徑、存在性與檔案列表

1. 文字資料的讀寫 open() & write() : rt模式的重新整理模式 當我們需要讀寫各種不同編碼的文字資料(如ASCII,UTF-8或UTF-16編碼等), 可以直接使用帶rt模式的open()內建函式。如果需要將文字內容寫入到一個檔案中,就要使用帶有 w

第二篇 Python資料型別、字元編碼、檔案處理

一、引子     1、什麼是資料?         x=10,10是我們要儲存的資料     2、為何資料要分不同的型別    

python資料處理----常用資料檔案處理

資料處理時,常用資料儲存形式主要有:CSV、JSON、XML、EXCEL、資料庫儲存。 一、CSV檔案 csv檔案簡介 CSV是一種通用的、相對簡單的檔案格式,被使用者、商業和科學廣泛應用。最廣泛的應用是在程式之間轉移表格資料,而這些程式本身是在不相容的格式上進行操作的(往往是私有的和/或無規

影象識別資料集處理——python 檔案操作

通過 excel 獲取資料集 資料集放在一個總資料夾中,excel中對影象標識做了記錄,我們需要通過讀取excel中的影象檔名來獲取相應的影象。 例項檔案結構如下: 源目錄 ├── 二級目錄1 │ ├──example_01.jpg │ └──example_02.

python配置檔案處理模組

import configparser class ReadConfig: '''read config file''' def read_config(self,file_path,section,option): cf = configparser.Co

Python-檔案操作處理

一、檔案操作基礎功能: f = open("檔案.txt", 'r', 'utf-8') #讀的模式開啟檔案 f = open("檔案.txt", 'r+', 'utf-8') #寫讀模式開啟檔案 f = open("檔案.txt", 'rb') # 讀取為二進位制模式,用於網路傳輸 f = o

Cris 的Python筆記(十三):異常和檔案處理

文章目錄 1. Python 是如何處理異常的? 2. Python 中常用的檔案處理語法(重點) 3. Python 處理二進位制檔案 4. seek 和 tell 方法 5. 檔案操作之 os 包的常