python基础学习5

在python下,

  1. 读模式(r)只可以读,不可以写
  2. 写模式(w)只可以写,不可以读,写的时候,若文件不存在,则会创建一个,若存在会清除该文件下内容,并将新的内容写进去
  3. 追加append(a)也可以进行写操作,不在不影响源文件的基础上进行写操作,同样的也是不可以读的
    f=open('春晓','r',encoding='utf8')
    data=f.read()
    data=f.read(5)
    print(data)
    f.close()
    f=open('春晓2','w',encoding='utf8')
    data=f.write("hello world")
    f.close()
    f=open('春晓','a',encoding='utf8')
    data=f.write("\nhello world\n")
    data=f.write("nihao")
    f.close()

对文件操作流程

  1. 打开文件,得到文件句柄(对象)并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

close关闭操作,在“程序执行完毕后”进行关闭,在程序结尾处写上,会直接执行(没写不安全),若是没有写,python机制可以对其关闭

    import time
    f=open('春晓','a',encoding='utf8')
    #print(f.fileno())#文件描述符 是区别不同文件的标志
    data=f.write("\nhello world\n")
    data=f.write("nihao")
    time.sleep(50) #上面的内容没有直接写到磁盘中,而是现在缓冲区中,在程序执行完毕后才写入,
                #所以在50秒之后才会在相应的文件中有结果
    f.close()
在此期间,可以同时通过不同的.py程序对目标文件进行读操作,写操作

readline:读取一行的内容,包括换行符,在同一个文件中进行第二次操作会继续读取下一行
相邻的readline读出内容之间各一行原因是:readline会读取改行最后面的换行符,导致换行,同时print有一个默认换行的操作,所以又换了一行,另一个readline读出的内容就会在该行
readlines:通过行读取指定文件的所有内容,并组成列表
tell:此方法可以查找光标的位置,对于英文来说:一个英文默认是1个字符,而对于中文来说:一个中文默认是3个字符
seek:可以调整光标的位置

    f=open('春晓','r',encoding='utf8')
    print(f.tell())#0
    f.read(2)
    print(f.tell())#6
    print(f.read(4))#不觉晓,

    f.seek(0)
    print(f.read(4))#春眠不觉

flush:可以随时将内存中缓存的数据更新到磁盘中。(一般进度条的读取可以使用)
truncate:截取文件中的内容,对append(a)方式是有意义的,因为此方式不会清空文件中的内容,而对于w写方式是
无意义的,因为在截取之前会清空文件中的内容
f.truncate(5) 截取5个字符之前的内容,后面的清空
r+:读写模式
w+:写读模式 会先清空文件中的内容,然后可以进行写操作,注意:在写之后若是进行读操作的话,注意光标的问题
a+:追加读模式 因为追加所以光标在最后,读的话会读不出来,需要进行光标的调整

内存的存储机制就决定着写数据只能在最后写,不可以在中间插入,所以不可以写操作

f=open('春晓','r',encoding='utf8')
number=0
for i in f:
    number+=1
    if number==3:
f.write("qwe")

不可以在第三行处添加,这两是不同的机制,所以可以先将文件总内容读取到内存上,在读取的过程中可以在指定的部分添加内容,再将读取到内存上的内容写到另一个文件中
补充:

with open('春晓','r') as f:
    ...

和上面的读操作一样,此方法可以不用手写f.close,with下面的代码段执行完毕后,会自动关闭

    #with同时管理多个文件对象
    with open("春晓",'r') as f1,open("春晓2",'w') as f2 :
        ...

可以同时对多个文件进行操作

猜你喜欢

转载自blog.csdn.net/ShaoDu/article/details/81448279