Python檔案處理(1)
阿新 • • 發佈:2019-02-20
讀取檔案
解決方案:
最簡單的就是一次性讀取所有的內容放在一個大字串中
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',如果不想這樣,有一些替代的方法
最簡單的逐行處理文字檔案的方法是用for迴圈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 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"