背景:今天一同事讓我幫忙處理一下檔案裡含有----+符號的行。如圖所示:
裡面文件好幾百行,一行一行去刪除,肯定是又浪費時間,又沒效率的事情。這時候可以使用python指令碼去處理!
一 設計思路
其實這個很有規律的,它的開頭是以「—」開頭,先使用readlines方法讀取每一行,然後每一行進行正則匹配,匹配成功的行就直接刪除!
二 程式**
#coding:utf-8
import re
import sys
import os
f=open('ticonf.old.txt','r+')
line=f.readlines()
f1=open('new.txt','w+')
f2=open('ticonf.det.txt','w')
print "now i will to delete ---+"
try:
for i in range(0,len(line)):
if re.match(r'^\-',line[i]):
del line[i]
print "delete line",i
else:
print "writing",i
f1.write(line[i])
except indexerror:
print "pass"
line1=f1.readline()
flag=0
try:
for i in range(0,len(line1)):
if re.match(r'^acc_num',line[i]):
flag+=1
if flag>3:
del line[i]
else:
continue
else:
f2.write(line[i])
except indexerror:
print "pass"
print flag
print "delete new.txt"
try:
os.remove( 'new.txt' )
except windowserror:
pass
f.close()
f2.close()
print "finish to delete ---+"
三 程式結果
四 總結和感悟
問題1 之前使用的是readline的但是讀取的行數總是錯誤,原因是
readline返回一行的字串, readlines返回包含檔案所有內容的字串列表, 每個元素是一行的字串,
問題2 之前想得出的結果直接在原來的文字上修改,但是程式執行成功,文字內容卻沒有變化,查了一下才知道修改後的文件都存在line裡面,因為他是乙個陣列,所以才寫了個文件儲存到裡面去
問題3 執行的時候總是報範圍錯誤,於是就用try...except函式把錯誤過濾掉。
問題4 正則匹配得好好學
python中yield關鍵字
mylist是乙個可迭代的物件。當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 mylist x x for x in range 3 for i in mylist print i 01 4在這裡,所有的值都存在記憶體當中,所以並不適合大量資料 def creategener...
Python中關鍵字引數和命名關鍵字引數的區別
python中函式的引數有位置引數 預設引數 可變引數 命名關鍵字引數和關鍵字引數,這個順序也是定義函式時的必須順序。本文主要是講講命名關鍵字引數和關鍵字引數的區別 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數...
python保留關鍵字和常用關鍵字
python保留關鍵字和常用關鍵字如下 上圖是python3中的關鍵字,python2.7中的關鍵字部分會有區別,具體在自己列印輸出檢視 import keyword print join keyword.kwlist lambda 用於匿名函式中 assert 斷言語句,常用與除錯 raise 用...