python open 文件

open(file,'r')

模式 可做操作 若文件不存在 是否覆蓋
r 只能讀 報錯 -
r+ 可讀可寫 報錯
w 只能寫 創(chuàng)建
w+ 可讀可寫 創(chuàng)建 否,追加寫
a 只能寫 創(chuàng)建 否裸燎,追加寫
a+ 可讀可寫 創(chuàng)建 否资昧,追加寫

1富玷、有文件a.txt嚎京,內(nèi)容為“abc”馆揉;如何將其內(nèi)容改為“123abc”业舍。

content = file.read()
file.close()
pos = content.find( "abc" )
if pos != -1:
    content = content[:pos] + "123" + content[pos:]
    file = open( "test.txt", "w" )
    file.write( content )
    file.close()
    print "替換了"

2、代碼是項目中需要處理一個文件升酣,所以使用python去處理舷暮,還有另外一個方法就是使用notepad++的正則替換,這里就只是使用python腳本去處理了噩茄。
可以對比python與shell哪種簡便下面。

# coding: UTF-8  #設置編碼
ff = open('C:\\Users\\yangwj\\Desktop\\1.txt','w')  #打開一個文件,可寫模式
with open('C:\\Users\\yangwj\\Desktop\\num.txt','r') as f:  #打開一個文件只讀模式
    line = f.readlines()  #讀取文件中的每一行绩聘,放入line列表中
    for line_list in line:    
        line_new =line_list.replace('\n','')  #將換行符替換為空('')
        line_new=line_new+r'|'+'\n'  #行末尾加上"|",同時加上"\n"換行符
        print(line_new)
        ff.write(line_new) #寫入一個新文件中

為什么不直接替換呢沥割?要先換成空格再添加耗啦??

append() 方法用于在列表list末尾添加新的對象机杜。

二帜讲、python 修改文件指定行的方法

·、用的方法比擬笨椒拗,將文件內(nèi)容按行讀入到一個列表中似将,修改指定行即給列表中元素賦值;修改完后陡叠,用writelines將列表從新寫入文件玩郊。

#!/usr/bin/python
import sys,os

f=open('hi.txt','r+')
flist=f.readlines()
flist[4]='hi\n'
f=open('hi.txt','w+')
f.writelines(flist)

2、示例:在PATH開頭的這一行末尾添加/usr/local/mysql/bin

with open('/home/mysql/.bash_profile') as f:
    lines=f.readlines()

with open('/home/mysql/.bash_profile','w') as w:
    for l in lines:
        if(l.startswith('PATH')):
            w.write(l.replace(b'\n',b':/usr/local/mysql/bin\n'))
        else:
            w.write(l)

3枉阵、不管是txt文件還是xml文件還是其他的译红,都可以用這種方法來批量替換文件中字符串:

# -*- coding:utf-8 -*-
__author__ = 'ShawDa'

import glob

xmls = glob.glob('xml_files/*.xml')
for one_xml in xmls:
    print(one_xml)
    f = open(one_xml, 'r+', encoding='utf-8')
    all_the_lines = f.readlines()
    f.seek(0)
    f.truncate()
    for line in all_the_lines:
        line = line.replace('dog', 'pig')
        line = line.replace('cat', 'bike')
        f.write(line)
    f.close()

4、批量讀取txt兴溜,并在文件開頭和每一行末尾添加字符串 (沒看懂)

from PIL import Image

#file.txt中存的是我需要批量讀取的txt的絕對路徑
lines = open("file.txt").readlines()
for line in lines:
     line = line.strip()#把每個絕對路徑最后的換行符去掉
     jpg_name = line.replace(".txt",".jpg")
     img = Image.open(jpg_name)
     #print line
     #打開每個txt進行操作
     with open(line) as f:
          f_lines = f.readlines()
          for i in range(0,len(f_lines)):
                f_lines[i] = "change_str" + f_lines[i].strip() +"change_str"+"\n"
      with open(line,"w") as f2:
          f2.writelines(f_lines)
      with open(line,"r+") as f3:
          content = f2.read()
          f3.seek(0,0)
          str_ = "Note\n"
          f3.write(str_+content)

f.seek(0, 0)不可或缺侦厚,file.seek(off, whence=0)在文件中移動文件指針, 從 whence ( 0 代表文件其始, 1 代表當前位置, 2 代表文件末尾)偏移 off 字節(jié)

5、直接使用 f.write() 每次都會把后面的內(nèi)容都修改掉

6拙徽、Python常見錯誤IndentationError: unexpected indent
http://www.reibang.com/p/070a1e52fa6f
沒對齊

7刨沦、批量處理某一目錄下的文件

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

import os
path = "/root/python.file/shouldadd/"

file_list = os.listdir(path)
for filename in file_list:
    filename = os.path.join(path,filename)
    with open(filename, 'r+') as f:
        lines = f.readlines()

    with open(filename , 'w') as w:
        for l in lines:
            if(l.startswith('# platform =')):
                str1 =  "Red Hat Enterprise Linux 7"
                str2 =  "Big Cloud Enterprise Linux 7"
                if str1 in l and str2 not in l:
                    w.write(l.replace(b'\n',b',Big Cloud Enterprise Linux 7\n'))
                else:
                    w.write(l)
            else:
                w.write(l)

os.path.listdir(path) 獲取的是目錄下的文件名

os.path.join() 需要把path 和文件名連接起來,才能正常讀取

for obj in objects:
    if os.path.isdir(os.path.join(path, obj)):#判斷是否是目錄os.path.join()用來將路徑拼接
        dir_list.append(os.path.join(path, obj))#保存時保存完整路徑才能對其進行后續(xù)操作
        print "dir:",obj
   else:
      file_list.append(os.path.join(path, obj))

注意:使用os.isdir()與os.isfile()時膘怕,參數(shù)必須是一個相對路徑或者絕對路徑想诅,不能光是一個文件名或者目錄名稱,這也是上面示例代碼中使用os.path.join()的原因岛心,否則函數(shù)將判斷不出正確結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末来破,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忘古,更是在濱河造成了極大的恐慌徘禁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件髓堪,死亡現(xiàn)場離奇詭異送朱,居然都是意外死亡,警方通過查閱死者的電腦和手機干旁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門驶沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人争群,你說我怎么就攤上這事回怜。” “怎么了祭阀?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵鹉戚,是天一觀的道長鲜戒。 經(jīng)常有香客問我,道長抹凳,這世上最難降的妖魔是什么遏餐? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赢底,結(jié)果婚禮上失都,老公的妹妹穿的比我還像新娘。我一直安慰自己幸冻,他們只是感情好粹庞,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洽损,像睡著了一般庞溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碑定,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天流码,我揣著相機與錄音,去河邊找鬼延刘。 笑死漫试,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的碘赖。 我是一名探鬼主播驾荣,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼普泡!你這毒婦竟也來了播掷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤劫哼,失蹤者是張志新(化名)和其女友劉穎叮趴,沒想到半個月后割笙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體权烧,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年伤溉,在試婚紗的時候發(fā)現(xiàn)自己被綠了般码。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡乱顾,死狀恐怖板祝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情走净,我是刑警寧澤券时,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布孤里,位于F島的核電站,受9級特大地震影響橘洞,放射性物質(zhì)發(fā)生泄漏捌袜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一炸枣、第九天 我趴在偏房一處隱蔽的房頂上張望虏等。 院中可真熱鬧,春花似錦适肠、人聲如沸霍衫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦跌。三九已至,卻和暖如春逛揩,著一層夾襖步出監(jiān)牢的瞬間峰髓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工息尺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携兵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓搂誉,卻偏偏與公主長得像徐紧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炭懊,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容