码迷,mamicode.com
首页 > 编程语言 > 详细

Python全栈-day6-day7

时间:2018-03-23 20:26:53      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:replace   其他   中文   编码   blog   day   编写程序   编号   文件操作   

一、字符编码

1.编码基础

  定义:人在使用计算机时,使用的是人类能够读懂的字符,使用者必须通过一张字符和数字间的相对应关系表实现人机交互,这一系列标准称为字符编码

  Python应用中解决核心字符串乱码的最佳方法:用什么格式编码,就用什么格式解码

  参考:http://www.cnblogs.com/linhaifeng/articles/5950339.html#_label2

二、文件处理

1.文件基础

  1)定义

  计算机系统分为:计算机硬件,操作系统,应用程序三部分。python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件。实际上,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

  2)操作文件的流程:

    a.打开文件,得到文件句柄并赋值给一个变量
    b.通过句柄对文件进行操作
    c.关闭文件

2.Python中文件操作

  1)打开文件的过程

# 打开文件,得到文件句柄并赋值给一个变量
f=open(test.txt,r,encoding=utf-8) #默认打开模式就为r,即只读模式
# 通过句柄对文件进行操作
data=f.read()
# 关闭文件
f.close()

  打开文件的执行过程:

    a.应用程序想操作系统发起系统调用open()请求

    b.操作系统打开文件,将文件内容加载到内存中,并返回一个文件句柄给应用程序

    c.应用程序将文件句柄赋值给 f 

  2)open()方法介绍

      open(r‘文件路径‘,mode=‘打开方式‘,encoding=‘编码格式‘)

      r作用:避免文件路径中的特殊字符例如‘\‘被强制转义,导致路径无法识别

      打开方式:r/w/a(只读只写追加等)

      编码格式:应用程序打开文件时,必须制定其打开的编码格式,否则有可能出现乱码

  3)文件打开的模式

技术分享图片

打开文件的模式有(默认为文本模式):
r     只读模式        默认模式,文件必须存在,不存在则抛出异常
w    只写模式        不可读;不存在则创建;存在则清空内容
a     追加写模式     不可读;不存在则创建;存在则只追加内容

对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式) rb wb ab 注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 了解部分:
+ 表示可以同时读写某个文件 r+ 读写可读,可写 w+ 写读可读,可写 a+ 写读可读,可写

3.操作文件的方法

  读文件操作:

  1)read()

# 读取文件所有内容,光标移动到文件末尾
f = open(rtest.txt,r,encoding=utf-8)
prit(f.read())
f.close()

  2)readline()、readlines()

# f.readline()     读取一行内容,光标移动到第二行首部
# f.readlines()    读取每一行内容,存放于列表中 

# 单行读取文件
print(f.readline())

# 多行读取,且转化为列表输出
print(f.readlines())

  3)readable()

# 判断文件是否可读
print(f.readable())

  读文件:

  1)write()

# 只写模式
# 注意:
# 1.文件存在时,清空原来的内容
# 2.文件不存在是,创建空文件
# 3.默认不会自动换行写入
f = open(rzhang.txt,w,encoding=utf-8) #默认是wt
f.write(第一行\n)
f.write(第二行\n)

# 追加写的模式
# 注意:
# 1.文件存在时,光标移动到文件末尾,且将内容追加到文件默认
# 2.文件不存在是,创建空文件
f = open(rzhang.txt,a,encoding=utf-8) #默认是wt
f.write(第一行\n)
f.write(第二行\n)
f.close()

  2)其他内置方法

f.writable()    #判断文件是否可读
f.writelines()  #以列表形式,多行写入

4.练习

  1)循环读取文件

# open(r‘文件路径‘,mode=‘打开方式‘encoding=‘编码格式‘)
with open(rzhang.txt,mode=r,encoding=utf-8) as file:
    for line in file:
        time.sleep(1)
        print(line,end=‘‘)

  2)简单写文件,并且实现写入的新内容总是置于文件末尾

with open(rzhang.txt,mode=a,encoding=utf-8) as file:
    file.write(第一天\n)

  3)文件打开之b模式

技术分享图片
# 1.必须和其它模式组合使用,rb\wb\ab
# 2.b模式下读写都是以bytes为单位
# 3.b模式下不能指定encoding和decoding模式

# rb模式
with open(r120.jpg,rb) as f:
    data = f.read()
    print(data)
    print(type(data))

with open(rzhang.txt,rb) as f:
    data = f.read()
    print(data)
    print(data.decode(utf-8),end=‘‘)
    print(type(data))

# wb模式
# 不同编码格式写入,查看打开出现的情况
with open(r120.txt,wb) as f:
    msg = 你是猪吗?
    f.write(msg.encode(gbk))
with open(r120.txt,wb) as f:
    msg = 你是猪吗?
    f.write(msg.encode(utf-8))


# ab模式
with open(r120.txt,ab) as f:
    f.write(张哈哈.encode(utf-8))

# 可以看出.jpg以bytes的形式被存储和打开了
with open(r120.jpg,rb) as f:
    for line in f:
        print(line)
View Code

5.作业:文件修改

  1)修改文件的实际

技术分享图片
# 修改文件方式一:
# 1.先把文件全部读到内存中
# 2.然后在内存中完成修改
# 3.再把修改后的结果覆盖到源文件中
# 缺点:会在文件内容过大的情况下耗费过多的内存
with open(r修改文件.txt,r,encoding=utf-8) as f:
    data = f.read()
    data = data.replace(zhang,你是猪吗?)
with open(r修改文件.txt,w,encoding=utf-8) as f:
    f.write(data)

# 修改文件方式二:
# 1.以读的方式打开原文件
# 2.以写的方式拷贝到新文件

import os
with open(r修改文件.txt,rt,encoding=utf-8) as src_f,        open(r修改文件.txt.swap,wt,encoding=utf-8) as dst_f:
    for line in src_f:
        if 你是猪吗? in line:
            line = line.replace(你是猪吗,啊哈哈)
        dst_f.write(line)
os.remove(修改文件.txt)
os.rename(修改文件.txt.swap,修改文件.txt)
View Code

  2)实现文件拷贝

rst_file = input(原文件路径>>)
dst_file = input(目标文件路径>>)

with open(r%s %rst_file,rb) as src_f,        open(r%s %dst_file,wb) as dst_f:
    for line in src_f:
        dst_f.write(line)

  3)拷贝文件和修改文件程序

技术分享图片
# 编写程序,提供两种可选功能:
# 1)拷贝文件
# 2)修改文件
# 用户输入操作的编码,根据用户输入的编号
# 执行文件拷贝(让用户输入原文件路径和目标文件路径)
# 或修改操作

import os
print(选择模式:)
warm = ‘‘‘
    1 拷贝文件
    2 修改文件
    输入quit退出
‘‘‘
print(warm)
while True:
    choice = input(选择操作>>).strip()
    if choice == 1:
        src_file = input(输入原文件路径>>).strip()
        dst_file = input(输入目标文件路径>>).strip()
        with open(r%s %src_file,rb) as src,            open(r%s %dst_file,wb) as dst:
                for line in src:
                    dst.write(line)
    elif choice == 2:
        dst_f = input(输入要修改的文件路径>>).strip()
        msg_old = input(输入要修改的内容>>).strip()
        msg_new = input(修改后的内容>>).strip()
# # 方法一:
#         with open(r‘%s‘ %dst_f,‘r‘,encoding=‘utf-8‘) as f_old:
#             data = f_old.read()
#             data = data.replace(msg_old,msg_new)
#         with open(r‘%s‘ %dst_f,‘w‘,encoding=‘utf-8‘) as f_new:
#             f_new.write(data)
# 方法二:
        dst_f_swap = input(临时交换的文件名>>)
        with open(r%s %dst_f,r,encoding=utf-8) as f_old,                open(r%s % dst_f_swap,w,encoding=utf-8) as f_new:
            for line in f_old:
                if msg_old in line:
                    line = line.replace(msg_old,msg_new)
                f_new.write(line)
        os.remove(dst_f)
        os.rename(dst_f_swap,dst_f)

    elif choice == quit:
        break
    else:
        print(没有这个选项,请重新输入...)
View Code

补充说明:资源回收

打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收
回收方法为:
1)f.close() #回收操作系统级打开的文件
2)del f #回收应用程序级的变量

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()

推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文
with open(a.txt,w) as f:
    pass
 
with open(rtest.txt,r,encoding=utf-8) as f:
    data=f.read()

 

 

 

    

 

Python全栈-day6-day7

标签:replace   其他   中文   编码   blog   day   编写程序   编号   文件操作   

原文地址:https://www.cnblogs.com/mdzzbojo/p/8625890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!