文件操作

文件操作
https://www.cnblogs.com/c-x-m/p/7756498.html
操作文件三步  1 产生文件句柄  2 操作文件句柄   3关闭文件
文件是一个可跌代对象,在使用文件路径时尽量使用相对路径,不适用绝对路径
#with  open() as:
使用with语法对文件进行读取,不用使用close()关闭。同时对多个文件操作,对file1读取,对file2覆盖写入
with open('file.txt', encoding='utf-8') as fd1, \
    open('file2.txt', encoding='utf-8', mode='w') as fd2:
    print(fd1.read())
    fd2.write('qwe123')
fd = open(r"路径", enconding='编码', mode='模式')          fd文件句柄
fd = open(r"E:\面授\python\项目代码练习等\test.txt", encoding='utf-8', mode='r')
content = fd.read()
print(contend)
fd.close()
mode(模式): r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 

r   只读模式,光标默认在文件首,使用read()
w   写模式,注意有w就会先将文件清空后再write()
a   追加 append,默认将光标移动到文件末尾,换行需要自己手动加'\n'
r+  读写模式,先读 后写 注意不管读多少字符,只要读过后有‘+’就会将光标移到文件尾(常用的读写模式)
rb  读非文本文件,如图片等其他格式文件mode里如果有b. encoding就不能给了
wb  写非文本文件,如对图片等文件进行写操作mode里如果有b. encoding就不能给了
注意:带w的将会清空文件,带+的会操作过后光标会移动到文件末尾
rb, wb, ab, bytes如果处理的是非文本文件, mode里如果有b. encoding就不能给了
a+  追加读写
ab  追加写
r+b 读写非文本文件
w+b 写读非文本文件
a+b 追加读写非文本文件
去除文件中读出的\n用.strip()
#read()          不写参数表示返回读全文内容  r模式下是按字符读取的。 rb模式是按照字节取的(一个英文占一个字节,一个中文占三个字节)大文件禁用,因为会读出所有内容 用for合理
#read(n)        读取n个字符,返回读取的内容,注意单位是字符
#readline()      fd.readline() 一行一行读取,每调用一次读出一行,所有行读完了读出的都是空格s
#readlines()    fd.readlines() 将每一行作为列表的元素读出,想去除读出的\n加 .strip()
#for循环          最好 在内存中只占一行 常用的遍历文件
fd = open('file.txt', encoding='utf-8', mode='r')
for i in fd:
    print(i)
fd.close()
#fd.flush()    将缓存中的数据写入磁盘
#write(line)   将line的内容写入,如果没有文件自动创建,常与fd.flush(),将句柄中的缓存写入磁盘中,返回值是写入的字符长度。
fd = open('file.txt',encoding='utf-8', mode='w')
fd.write('hello')
#tell()   告诉指针的位置
fd = open('file.txt',encoding='utf-8', mode='w')
fd.write('hello')
print(fd.tell())
fd.close()
#seek(参数1,参数2)    fd.seek(),移动光标位置单位是bity字节。当有换行时会被截断无返回值,seek的两个参数意义是,参数1:偏移量。参数二有三个值0表示文件开头, 1表示当前位置,2表示文件末尾。第二个参数默认为0。如seek(0)表示移动光标到文件开头,seek(0,2)移动光标到文件末尾。seek(2,1)相对当前位置向右偏移两个字节,seek(-1,2)光标移到文件倒数第一位
注意:当使用seek()函数后就报编码错误,可能是使用truncate()函数将字节算错。导致,重算节取字节即可
#truncate()     截取文件。fd.truncate()保留光标前内容,删除光标后面的内容。
#truncate(12)  保留12个字节bity,其余的内容删除。
文件权限mode不写默认为 读r
windows默认gbk编码 Linux默认utf-8编码格式 pycharmv
编码错误报错


改文件
文件修改只有两种方式: 1 通过中间变量存储,再重新刷进文件中
                   2 创建新文件后更改,再把文件改名
更改文件时的5个步骤1 打开源文件,产生文件句柄
2 创建新文件,产生文件句柄
3 读取源文件,进行修改写入新文件
4 将源文件删除
5 将新文件重命名
file3中的内容,要求将文中的所有“难”改为“易"
行路难 行路难
多歧路 今安在
长风破浪难有时
直挂云帆难沧海

#导入os模块
import os
with open('file3.txt', encoding='utf-8', mode='r') as fd,\
open('file3.bak', encoding='utf-8', mode='w')as fd2:
    for oldfile in fd:
        newfiel = oldfile.replace('', '')
        fd2.write(newfiel)
    os.remove('file3.txt')
    os.rename('file3.bak', 'file3.txt')
注:文件改名后,不能再用改名前的文件句柄了,如果想使用read()等函数就要重新生成新的句柄再对文件操作

 

posted on 2018-08-07 19:03  _王晓东  阅读(269)  评论(0编辑  收藏  举报

导航