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

Python檔案處理(1)

讀取檔案

解決方案:

最簡單的就是一次性讀取所有的內容放在一個大字串中 

all_the_text=open('thefile.txt').read()
all_the_data=open('abinfile','rb').read()

為了安全起見,最好將開啟的檔案物件指定一個名字,這樣操作完成後可以迅速關閉檔案 

file_object=open('thefile.txt')
try:
    all_the_file=file_object.read();
finally:
    file_object.close();

更簡單的方法是逐行讀取文字檔案內容,將讀取的資料放置於一個字串列表中 

file_object=open('thefile.txt')
try:
    list_of_all_the_lines=file_object.readlines()
finally:
    file_object.close();

這樣每一行的末尾都會有'\n',如果不想這樣,有一些替代的方法 

list_of_all_the_lines=file_object.read().splitlines()
list_of_all_the_lines=file_object.read().split('\n')
list_of_all_the_lines=[L.rstrip('\n') for L in file_object]
最簡單的逐行處理文字檔案的方法是用for迴圈 
for line in file_object:
       print line
刪除行尾的'\n'只需要新增 
line=line.rstrip('\n')

寫入檔案

解決方案:

最簡單的方法: 

open('e://thefile.txt','w').write(all_the_text)
open('abinfile','wb').write(all_the_data)
有時候需要寫入的檔案不在一個大字串中,而在一個字串列表中,這時候需要用到writelines方法 
list_of_text_strings=['abc\n','defg\n','hijkl hahaha\n']
file_object=open('e://thefile.txt','w')
file_object.writelines(list_of_text_strings)
file_object.close()

搜尋和替換檔案中的文字(將某個字串變為另一個)

解決方案:

使用字串物件的replace方法 

import os,sys
nargs=len(sys.argv)
if not 3<=nargs<=5:
    print "usage: %s search_text repalce_text [infile [outfile]]" % \
        os.path.basename(sys.argv[0])
else:
    stext=sys.argv[1]
    rtext=sys.argv[2]
    input_file=sys.stdin
    output_file=sys.stdout
    if nargs> 3:
        input_file=open(sys.argv[3])
    if nargs> 4:
        output_file=open(sys.argv[4])
    for s in input_file:
        output_file.write(s.replace(stext,rtext))
    output_file.close()
    input_file.close()
我試驗了一次,發現這裡的s是讀取一行進行一次替換然後將替換好的行寫入檔案

從檔案中讀取指定的行

解決方案:

使用標準庫linecache模組 

import linecache
theline=linecache.getline('thefile.txt',line_number)

處理檔案中每個單詞

解決方案:

使用兩重迴圈,一重處理行,一重處理單詞 

for line in open('thefile.txt'):
    for word in line.split():
        print word

遍歷目錄樹

解決方案:

使用os模組中的os.walk 

import os,fnmatch
def all_files(root,patterns='*',single_level=False,yield_folders=False):
    patterns=patterns.split(';')
    for path,subdir,files in os.walk(root):
        if yield_folders:
            files.extend(subdir)
        files.sort()
        for name in files:
            for pattern in patterns:
                if fnmatch.fnmatch(name,pattern):
                   yield os.path.join(path,name)
                   break
        if single_level:
            break

for path in all_files('e://',single_level=True):
    print path

從指定搜尋路徑尋找檔案

解決方案:

迴圈指定的搜尋路徑中的目錄 

import os
def search_file(filename,search_path,pathsep=os.pathsep):
    for path in search_path.split(pathsep):
        canditate=os.path.join(path,filename)
        if os.path.isfile(canditate):
            return os.path.abspath(canditate)
        return None
search_path='h://'
find_file=search_file('wubi*',search_path)
if find_file:
    print "File found at %s" % find_file
else:
    print "File not found"