0508Python基础-文件操作

0508Python基础-文件操作

1、文件操作初识

    护士空姐学生少妇联系方式.txt

    Python代码

    path    文件路径:d:\护士空姐学生少妇联系方式.txt

    encoding编码方式:utf-8,gbk....

    mode    操作方式: 只读,只写,追加,读写,写读.....

    路径:绝对路径:从根目录开始一直找到文件。

          相对路径:从当前目录开始找到的文件。

    错误原因分析:

        UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

         编码错误:文件存储时编码方式与文件打开时的编码方式不一致。

        SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape

        两种:

            第一种:加r

            f1 = open(r'd:\u护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')

            print(f1.read())

            f1.close()

         第一种:加\

            f1 = open('d:\\护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')

            print(f1.read())

            f1.close()

       可简写场景:

    #凡是带b不用encoding

#只有是r模式 mode='r'可以省略不写

 

2、文件操作 r,w,a

 

    读模式:

        *r

            read

            read(n)

            readline()

            readlines()

            for循环 最好的

        rb

        *r+

        r+b

 

    写模式:

        *w

            w:没有文件,创建文件写内容。

            w:如果有文件,清空原文件,写入新内容。

        wb

        w+

        w+b

 

    追加模式

        *a

            a:没有文件,创建文件写内容。

            a:如果有文件,最后面追加新内容。

        ab

        a+

        a+b

        补充:

            gbk utf-8

            对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。

            s1 = '123abc*'

            b1 = s1.encode('utf-8')

            s2 = b1.decode('gbk')

            print(s2)

 

详细代码演示
f1 = open('d:\护士空姐学生少妇联系方式.txt', encoding='GB2312', mode='r')
print(f1.read())
f1.close()

变量:f1_obj,f1_file,file,file_handle... 文件句柄。
open Python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。
windows系统默认的编码方式gbk,linux,macos:utf-8.
流程: 1打开文件,产生文件句柄。
       2对文件句柄进行相应的操作。
       3,关闭文件。

f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f2.read())
f1.close()

r rb
1,f.read() 全部读出来。
f2 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f2.read())
f2.close()
,2 f.read(n)

f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.read(3))
f1.close()
r模式:read(n) n 是按照字符读取。
rb模式:read(n) n 是按照字节读取。

readline() 按行读取
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readline())
print(f1.readline())
print(f1.readline())
print(f1.readline())
f1.close()


readlines() 返回一个list 里面的元素是每一行。
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
print(f1.readlines())
for line in f1.readlines():
    print(line)
f1.close()

for 循环去读取。
f1 = open('护士学生空姐班主任.txt', encoding='utf-8')
for line in f1:
    print(line)
f1.close()

rb模式 非文字类的文件
f1 = open('护士学生空姐班主任.txt',mode='rb')
print(f1.read(1))
f1.close()


r+ 读写,先读后写

f1 = open('护士学生空姐班主任.txt', encoding='utf-8', mode='r+')
print(f1.read())
f1.write('666')
f1.close()

r+b 读写,先读后写

f1 = open('护士学生空姐班主任.txt', mode='r+b')
print(f1.read())
f1.write('666'.encode('utf-8'))
f1.close()

w wb模式
w:没有文件,创建文件写内容。
w:如果有文件,清空原文件,写入新内容。
f1 = open('log1', encoding='utf-8', mode='w')
f1.write('老男孩是最好的培训学校...')
f1.close()

f1 = open('log1', encoding='utf-8', mode='w')
f1.write('法国进口分类结果')
f1.close()

wb
f1 = open('log2', mode='wb')
f1.write('法国进口分类结果'.encode('utf-8'))
f1.close()

w+ 先写后读
f1 = open('log1', encoding='utf-8', mode='w+')
f1.write('老老男孩.....')
f1.seek(0)  # 调整光标
print(f1.read())
f1.close()

w+b

a ab
a:没有文件,创建文件写内容。
a+:有文件,直接在原文件的后面追加新内容。
f1 = open('log3', encoding='utf-8', mode='a')
f1.write('barry')
f1.close()

a+ 追加可读
f1 = open('log3', encoding='utf-8', mode='a+')
f1.write('范德萨急功近利开发工具')
f1.seek(0)
print(f1.read())
f1.close()

f1 = open('log3', mode='ab')
f1.write('中国'.encode('gbk'))
f1.close()

ps 非文字的文件的读取写入
f1 = open('11.jpg', mode='rb')
content = f1.read()
print(content)
f1.close()
f2 = open('小猪佩奇.jpg', mode='wb')
f2.write(content)

      

3、文件操作常用方法


read  write  read(n) readline() readlines() seek

readlable() writeable()判断是否可读或者可写
f1 = open('log1', encoding='utf-8')
print(f1.readable())
print(f1.writable())
f1 = open('log1', encoding='utf-8',mode='r+')
print(f1.readable())
print(f1.writable())

seek: 按照字节去调整光标
f1 = open('log1', encoding='utf-8')
f1.seek(3)
print(f1.read())
f1.close()
tell 告诉光标的位置
f1 = open('log1', encoding='utf-8')
print(f1.tell())
print(f1.read())
print(f1.tell())
f1.close()
truncate 对原文件进行截取内容,以字节形式,只能在a模式下使用。
f1 = open('log1', encoding='utf-8', mode='a')
f1.truncate(3)
f1.close()

文件操作的另一种写法
with open() as 不用主动关闭 f1.close()
同一open 可以操作多个文件
with open('log1', encoding='utf-8') as f1:
    print(f1.read())
with open('log1', encoding='utf-8') as f1,\
    open('log2',encoding='utf-8', mode='w') as f2:
    print(f1.read())
    f2.write('666')
with open('log1', encoding='utf-8') as f1:
    content = f1.read()
    f1.close()
    pass
    with open('log1', encoding='utf-8',mode='w') as f2:
        f2.write('333')

      

4、文件的改。

      

1,打开原文件 old_file,将原内容读取到内存。

2,创建一个新文件new_file。

3,将原内容通过你改写形成新内容,写入到新文件。

4,将原文件删除。

5,将新文件重命名成原文件。

 

方法一,原文件内容不打,可以用此方法,但是此方法还是很low。

import os

with open('change', encoding='utf-8') as f1,\

    open('change.bak', encoding='utf-8', mode='w') as f2:

    old_content = f1.read()

    new_content = old_content.replace('alex', 'SB')

    f2.write(new_content)

os.remove('change')

os.rename('change.bak', 'change')

 

方法2

import os

with open('change', encoding='utf-8') as f1,\

    open('change.bak', encoding='utf-8', mode='w') as f2:

    for line in f1:

        new_line = line.replace('SB', 'alex')

        f2.write(new_line)

os.remove('change')

os.rename('change.bak', 'change')

posted on 2018-05-08 15:34  kindle86  阅读(109)  评论(0编辑  收藏  举报

导航