python open 文件

open(file,'r')

模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错
w 只能写 创建
w+ 可读可写 创建 否,追加写
a 只能写 创建 否,追加写
a+ 可读可写 创建 否,追加写

1、有文件a.txt,内容为“abc”;如何将其内容改为“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 修改文件指定行的方法

·、用的方法比拟笨,将文件内容按行读入到一个列表中,修改指定行即给列表中元素赋值;修改完后,用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 字节

5、直接使用 f.write() 每次都会把后面的内容都修改掉

6、Python常见错误IndentationError: unexpected indent
https://www.jianshu.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))#保存时保存完整路径才能对其进行后续操作
        print "dir:",obj
   else:
      file_list.append(os.path.join(path, obj))

注意:使用os.isdir()与os.isfile()时,参数必须是一个相对路径或者绝对路径,不能光是一个文件名或者目录名称,这也是上面示例代码中使用os.path.join()的原因,否则函数将判断不出正确结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容