设为首页 加入收藏

TOP

python文件操作
2017-09-30 17:04:52 】 浏览:5817
Tags:python 文件 操作

文件操作流程

  1.打开文件,得到文件句柄并赋值给一个变量,

  2.通过句柄对文件进行操作,

  3.关闭文件。

  例如现有一个文件内容如下:

  昨夜寒蛩不住鸣。

  惊回千里梦,已三更。
  起来独自绕阶行。
  人悄悄,帘外月胧明。
  白首为功名,旧山松竹老,阻归程。
  欲将心事付瑶琴。
  知音少,弦断有谁听。
     操作此文件:
f = open('小重山') #打开文件
data=f.read()#获取文件内容
f.close() #关闭文件

  注意:文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。

  文件打开模式

  文件具体操作

  f.read()读取文件内容,读的时候从光标的位置开始读,

  f.read(5)读取5个字符,在2.x版本里读5个字节。

  f.readline读出一行内容包括换行符。

  f.readlines读出所有行放到一个列表中,每一行包括换行符。

  例子:打印所有行,另外第3行后面加上:'end 3',

count=0
for line in f:#这是迭代方法,每次只读一行,节省内存
    if count==3:
        line=''.join([line.strip(),'end 3'])
    print(line.strip())
    count+=1

  f.flush(写操作并不会立即写到磁盘,而是存到缓存区最后才是存)

  f.write(),f.flush(),内容会立即写到磁盘上。

  f.seek()调整光标的位置,按字节计算的。可以包含两个参数,第二个参数可以是0,1,2,0代表从最开始计算移动,1表示从当前位置开始移动,2表示从最后开始移动。

  例如:f.seek(-3,2)就是从最后开始计算光标往前移3个字节。模式二必须在bytes的模式才能使用,r模式不能操作。

  f.tell()打印光标位置。

  进度条:

  import sys,sys.stdout就是标准输出的文件句柄,可进行读写操作,

import sys
sys.stdout.write("hello")
输出结果:
hello

  print函数就是stdout实现的。

import sys

for i in range(100):
    s="\r%d%% %s"%(i,"#"*i)
    sys.stdout.write(s)
    sys.stdout.flush()
    import time
    time.sleep(0.5)
进度条代码

  seek可完成断点续传。

  with open() as f:获得文件句柄,为了避免打开文件后忘记关闭,可以通过这种方式获得文件句柄。当with代码块执行完毕时,内部会自动关闭并释放文件资源。with支持同时对多个文件的上下文进行管理。

with open('log1') as obj1, open('log2') as obj2:
    pass

  练习取出网址中的server打印出来:

frontend oldboy.org
         bind 0.0.0.0:80
         option httplog
         option httpclose
         option  forwardfor
         log global
         acl www hdr_reg(host) -i www.oldboy.org
         use_backend www.oldboy.org if www

backend www.oldboy1.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33
        server 10.10.10.1 10.10.10.1 weight 22   maxconn 2000
        server 2.2.2.4 2.2.2.4       weight 20   maxconn 3000

backend www.oldboy2.org
        server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000

backend www.oldboy20.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33
文件haproxy.conf
while 1:


    m=input('please input url:').strip()

    l=[]

    flag=False

    with open("haproxy.conf",encoding="utf8") as f_read:

        for line in f_read:

            if line.startswith("backend") and m in line:  #第一步:信息匹配
                flag=True   # 设定一个开关
                continue

            if line.startswith("backend") and flag:  # 第三部:跳出循环
                break

            if flag:     # 第二步:将信息存放到列表
                #[]
                l.append(line.strip())

        for i in l:
            print(i)
View Code

  文件修改:

  文件修改的思路就是创建一个新的文件,遍历原文件修改要改的东西存到另一个新的文件,文件名称交换。

import os
with open("test",encoding="utf8") as f_read,open("test7",encoding="utf8",mode="w") as f_write:
    count=0
    for line in f_read:
        if count==3:
            line="".join([line.strip(),"岳飞\n"])
        f_write.write(line)
        count+=1

os.rename("test", "test_bak")
os.rename("test7","test")
文件修改的方式
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇老铁,这年头不会点Git真不行!!.. 下一篇算法学习(二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目