python之文件的读写,模块的导入,异常处理,json数据处理

#异常

如果没有预判错误,出现错误输入就会终止程序,很不方便,举例如下:
<1>In [1]: num = int(raw_input('请输入一个整数:'))
请输入一个整数:1

<2>In [2]: num = int(raw_input('请输入一个整数:'))
请输入一个整数:a

ValueError                                Traceback (most recent call last)
<ipython-i
nput-2-0422073613ca> in <module>()
----> 1 num = int(raw_input('请输入一个整数:'))

ValueError: invalid literal for int() with base 10: 'a'

于是引入“异常”

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file: -01.py
date: -07-24  7:39 PM
author: ting
desc:
程序开发中,如果对某些代码的执行不确定(程序的语法完全正确),可以增加try来捕获异常

优点:不会终止程序,也不会影响后续程序的执行

语法结构:
try:
    尝试执行的代码
except:
    出现错误的处理

"""
try:
    num = int(raw_input('请输入一个整数:'))
except:
    print '请输入正确的整数:'
# 这行代码依旧可以执行
print '-'*60

这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file: -02.py
date: -07-24  7:53 PM
author: ting
desc:
当python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型

需求:
1.提示用户输入一个整数
2.使用10除以用户输入的整数并且输出

"""
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print '得到的结果为:' ,
    print result

# 输入的不是数字
# 0不能做除数
except ValueError:
    print '请输入正确的整数:'
except ZeroDivisionError:
    print '输入错误,0不能做除数'

这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:-03.py
date: 2018-07-上午1:52
author:ting
desc:
捕获未知错误:
    在开发的时候,要判断所有可能出现的错误,是有一定难度的
    如果希望程序无论出现什么错误,都不会因为python解释器抛出异常而终止,可以再增加一个except
"""
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print result
# result 这是一个变量,任何字符都可以代替,但是不能与关键字重名
except  Exception as result:
    print '未知错误 %s' % result

这里写图片描述
这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:-04.py
date: 2018-07-上午2:04
author:ting
desc:
try的完整语法结构:

try:
    # 尝试执行的代码
    pass
except: 错误类型1
    pass
except: 错误类型2
    pass
...
except Exception as result:
    pass
else:
    # 没有异常才会执行此代码
    pass
finally:
    # 无论是否有异常,都会执行此代码
    pass
"""
try:
    num = int(raw_input('请输入一个整数:'))
    result = 10 / num
    print result
except Exception as result:
    print '未知错误 %s' % result
else:
    print '尝试成功~~'
finally:
    print '**********************************************'

这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:-05.py
date: 2018-07-上午2:20
author:ting
desc:

"""
def demo1():
    return int(raw_input('请输入一个整数:'))
print demo1()

# 查看报错信息可知,错误会传递,第十行的错误传递给了第十一行

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:-06.py
date: 2018-07-上午2:23
author:ting
desc:
异常的传递:
    当 函数/方法 执行出现异常,会将异常传递给 函数/方法 调用的一方
    如果传递到主程序,依旧没有异常处理,程序才会终止,可以在主程序中增加
异常捕获,而在主程序中调用其他函数,只要出现异常,都会传递到主函数的异常捕
获中,这就不需要在代码中增加大量的异常捕获,也能够保证代码的整洁
"""
def demo1():
    return int(raw_input('请输入一个整数:'))
def demo2():
    return demo1()

# 利用异常的传递性,在主程序中捕获异常
try:
    print demo2()
except Exception as result:
    print '未知错误 %s' % result

这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:练习.py
date: 2018-07-上午2:33
author:ting
desc:
判断用户输入的密码:
1. <= 8 报错
2. >= 8 返回输入的密码
"""
def passwd():
    # 提示用户输入密码
    passwd = raw_input('请输入您的密码:')
    #  判度密码的长度是否大于等于8
    if len(passwd) >= 8:
        return passwd
    # 如果 < 8,报错
    print '您的输入有错误'
    # 创建异常对象(可以添加错误信息)
    ex = Exception('密码长度不够')
    raise ex

# 注意: 只抛出异常而不捕获异常,代码会报错

try:
    print passwd()
except Exception as result:
    print result


# 先创建异常对象,再抛出异常,再在主函数中捕获异常

这里写图片描述
这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:断言-07.py
date: 2018-07-上午3:47
author:ting
desc:
断言:可以理解为提前预言,让人更好地知道错误原因

"""
def func(num,div):
    # 加上此代码后,报错信息就会显示为自定义的报错信息,更方便看懂报错信息
    assert (div != 0),'div不能为0'
    return num/div
print func(4,0)

这里写图片描述
#模块
test1

# _*_ coding:utf-8 _*_
"""
file:test-1.py
date: 2018-07-上午3:08
author:ting
desc:

"""
title = '模块1'

# 函数
def say_hello():
    print '我是 %s' % title

# 类
class Cat(object):
    pass
test2
# _*_ coding:utf-8 _*_
"""
file:test-2.py
date: 2018-07-上午3:10
author:ting
desc:

"""
title = '模块2'

# 函数
def say_hi():
    print '我是 %s' %title
# 类
class Dog(object):
    pass
导入1
# _*_ coding:utf-8 _*_
"""
file:导入-1.py
date: 2018-07-上午3:13
author:ting
desc:

"""
# 在导入模块时,每个导入应独占一行
import test1
import test2

# 调用函数
test1.say_hello()
test2.say_hi()

# 创建对象
dog = test2.Dog
print dog

cat = test1.Cat
print cat

这里写图片描述

导入2
# _*_ coding:utf-8 _*_
"""
file:导入-2.py
date: 2018-07-上午3:24
author:ting
desc:
如果需要导入的模块文件名太长,可以用以下方法导入
"""
# 使用as指定模块的别名用大驼峰命名法
import test1 as CatModule
import test2 as DogModule

DogModule.say_hi()
CatModule.say_hello()

dog = DogModule.Dog()
print dog
cat = CatModule.Cat()
print cat

这里写图片描述

导入3
# _*_ coding:utf-8 _*_
"""
file:导入-3.py
date: 2018-07-上午3:31
author:ting
desc:

"""
from test1 import Cat

# 当导入两个模块文件时,谁在前就导入谁
from test2 import say_hi
# from test1 import say_hello


# 想用此方法导入两个模块文件时,第二个导入可以用以下方法导入
from test1 import say_hello as test1_say_hello


say_hi()
test1_say_hello()
mimi = Cat()

这里写图片描述
这里写图片描述

导入4
# _*_ coding:utf-8 _*_
"""
file:导入-4.py
date: 2018-07-上午3:41
author:ting
desc:
python的解释器在导入模块的时候,会
    1.搜索当前目录指定的模块文件,如果有就直接导入
    2.如果没有,再搜索系统目录
注意:在开发时,给文件起名,不要和系统模块文件重名
"""
import random
rand = random.randint(0,10)
print rand

这里写图片描述

test
# _*_ coding:utf-8 _*_
"""
file:test.py
date: 2018-07-上午5:51
author:ting
desc:

"""
# 全局变量,函数,类,直接执行的代码不是向外界提供的工具
def say_hello():
    print 'hello python~~'

print 'nice to meet you~~'
say_hello()
导入
# _*_ coding:utf-8 _*_
"""
file:-01.py
date: 2018-07-上午5:56
author:ting
desc:
在很多python文件中会看到以下格式的代码
    1.导入模块
    2.定义全部变量
    3.定义类
    4.定义函数

    # 在代码的下方
    def main():
        pass

    if __name__ == '__mian__'
        main()

上述格式的代码给人感觉比较专业
"""
# 导入的时候什么都没干,却直接执行了原模块文件中的代码
import test

这里写图片描述

test1111  改进
# _*_ coding:utf-8 _*_
"""
file:test改进.py
date: 2018-07-上午6:04
author:ting
desc:
    print __name__
    这句代码输出的是 __main__
__name__属性:
__name__属性可以做到
    测试模块的代码只在测试情况下被运行,而在被导入时不运行
__name__是python中的一个内置属性,记录着一个字符串
如果是被其他文件导入时,__name__就是模块名
如果是当前执行的程序,__name__就是__main__
"""
# 全局变量,函数,类,直接执行的代码不是向外界提供的工具
def say_hello():
    print 'hello python~~'

# print 'nice to meet you~~'

# 如果想要文件被导入的时候,能够直接被执行的代码不需要被执行,可以用以下代码来进行控制
if __name__ == '__main__':
    print __name__

#    print 'you are very friendly'
#   say_hello()
导入
# _*_ coding:utf-8 _*_
"""
file:-01.py
date: 2018-07-上午5:56
author:ting
desc:
在很多python文件中会看到以下格式的代码
    1.导入模块
    2.定义全部变量
    3.定义类
    4.定义函数

    # 在代码的下方
    def main():
        pass

    if __name__ == '__mian__'
        main()

上述格式的代码给人感觉比较专业
"""
# 导入的时候什么都没干,却直接执行了原模块文件中的代码
import test1111

这里写图片描述
#文件
##一种文件的读写方法
####读文件

README文件

westos
hello
nihao
say hi
linux
happy


# _*_ coding:utf-8 _*_
"""
file:-01.py
date: 2018-07-上午6:27
author:ting
desc:
操作文件的函数(方法)
在python中要操作文件需要记住 1个函数,3个方法
# python中一切皆对象
    open : 打开文件,并且返回文件操作对象
    read : 将文件内容读取到内存
    write: 将指定内容写入文件
    close:关闭文件

open函数负责打开文件,并且返回文件对象
read/write/close这三个方法都需要通过文件对象来调用

read方法(读取文件):一次性读入并返回文件的所有内容
open函数的第一个参数是要打开的文件名(文件名区分大小写)
    如果文件存在,返回文件操作对象
    如果文件不存在,会抛出异常
close方法负责关闭文件

在开发中,通常会先编写打开和关闭的代码

"""
# 打开文件
file = open('README')

# 操作文件 读/写
text = file.read()
print text

# 关闭文件
file.close()
# 如果忘记关闭文件,会造成系统消耗,而且会影响后续文件的读取

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:-02.py
date: 2018-07-上午6:48
author:ting
desc:
文件指针:
    文件指针标记从哪个位置开始读取数据
    当第一次打开文件时,通常文件指针会指向文件的开始位置
    当执行了read方法后,文件指针会移动到读取内容的末尾,不会再继续移动到文件的开始

"""
# 打开文件
file = open('README')
# 操作文件
text = file.read()
print text

# 打印输入内容的长度
print type(text)
print len(text)

print '*'*60

# 这里的代码不会被读取也不会被执行
text = file.read()
print text
print len(text)


# 关闭文件
file.close()

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:读文件-03.py
date: 2018-07-上午7:19
author:ting
desc:
读取大文件的方法(内容的多少未知)
按行读取文件:
    read方法默认会把文件的所有内容一次性读取到内存
    如果文件太大,对内存的占用会非常严重
readline方法:
    readline方法可以一次性读取一行内容
    方法执行后,会把文件指针移动到下一行,准备再次读取
"""
# 打开文件
file = open('README')
# 读取文件
# 写成死循环是因为不知道读取的文件有多少行
while True:
    text = file.readline()
    # 如果文件指针到文件的最后一行,那么就读不到内容了
    if not text:
        break
    # 每读取一行,末尾都会自动添加一个 \n
    print text
# 关闭文件
file.close()

这里写图片描述
####写文件

# _*_ coding:utf-8 _*_
"""
file:写文件-01.py
date: 2018-07-上午7:04
author:ting
desc:

写文件是通过改变文件指针的位置,来写入内容
打开文件的方式:
    name = open('文件名','访问方式')

"""
# 打开文件
# 'w'方式写入的内容只会覆盖原文件内容
file = open('README','w')
# 写入文件
file.write('westos')
# 关闭文件
file.close()

README文件

westos
# _*_ coding:utf-8 _*_
"""
file:写文件-追加-02.py
date: 2018-07-上午7:09
author:ting
desc:
以追加的方式打开文件
    如果文件存在,文件指针会放在文件的末尾
    如果文件不存在,创建文件并写入
"""
# 打开文件
file = open('README','a')
# 写入文件
file.write('hello')
# 关闭文件
file.close()
README文件

westoshello

####复制文件

# _*_ coding:utf-8 _*_
"""
file:复制文件-01.py
date: 2018-07-上午7:35
author:ting
desc:
以读取小文件的方式实现
"""
# 打开文件
# 源文件以读的方式打开
file_read = open('README')
# 目标文件以写的方式打开
file_write = open('README_COPY','w')

# 从源文件中读取文件
text = file_read.read()
# 将读取到的内容写入目标文件
file_write.write(text)

# 关闭文件
file_read.close()
file_write.close()
# _*_ coding:utf-8 _*_
"""
file:复制文件-02.py
date: 2018-07-上午7:42
author:ting
desc:
以读取大文件的方式实现,两种方式不同,但是执行的结果相同
"""
# 打开文件
file_read = open('README')
file_write = open('README_COPY','w')
# 读写文件
while True:
    text = file_read.readline()
    if not text:
        break
    file_write.write(text)
# 关闭文件
file_read.close()
file_write.close()

README_COPY文件

westoshello

##另外一种读写文件的方法
####读文件

pi_digitals文件

3.14215926
2.185235364
4.533465758
# _*_ coding:utf-8 _*_
"""
file:读文件-01.py
date: 2018-07-上午8:12
author:ting
desc:
相当于read

    关键字with在不需要访问文件后将其关闭,在这个程序中,我们调用了open(),
但没有调用close();你也可以调用open()和close()来打开和关闭文件,但这
样做时,如果程序存在bug,导致close()语句没有执行,文件将不会关闭,未妥
善地关闭文件可能会导致数据丢失或受损。
    如果在程序中过早地调用close(),你会发现需要使用文件时他已经关闭(无法访问),
这会导致更多的错误,你并非在任何情况下都能轻松确定关闭文件的恰当时机,通过使用with
结构,可以让python去确定,你只管打开文件,并在需要时使用它,python会在合适的时候自动将其关闭
"""
with open('pi_digitals') as file_object:
    contents = file_object.read()
    print contents

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:读文件-02.py
date: 2018-07-上午8:16
author:ting
desc:
相当于 readline
"""
filename = 'pi_digitals'
with open(filename) as file_object:
    for line in file_object:
        print line

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:读文件-03.py
date: 2018-07-上午8:25
author:ting
desc:
只读取文件的第一行
"""
filename = 'pi_digitals'
with open(filename) as file_object:
    lines = file_object.readline()
    print lines

这里写图片描述
####写文件

# _*_ coding:utf-8 _*_
"""
file:写文件-01.py
date: 2018-07-上午8:19
author:ting
desc:
相当于write
"""
filename = 'linux'
with open(filename,'w') as file_object:
    file_object.write('I am ok.\n')
    file_object.write('i like you.\n')
linux文件

I am ok.
i like you.
# _*_ coding:utf-8 _*_
"""
file:写文件-02.py
date: 2018-07-上午8:24
author:ting
desc:
相当于追加
"""
filename = 'linux'
with open(filename,'a') as file_object:
    file_object.write('I am ok.\n')
    file_object.write('i like you.\n')
linux文件

I am ok.
i like you.
I am ok.
i like you.

#json 模块
####json.dump

# _*_ coding:utf-8 _*_
"""
file:json.dump.py
date: 2018-07-上午8:38
author:ting
desc:
给文件中写入内容

很多程序都要求用户输入某种信息,程序都把用户提供的信息存储在列表和字典等数据结构中,
用户关闭程序时,几乎总是要保存他们的的信息

有一种简单的方式是使用模块json来存储数据
    (在python中使用json的时候,主要也就是使用json模块,json是一种良好的模块)
模块json让你能够将简单的python数据结构转存到文件中,并在程序再次运行时加载该文件中的数据,
你还可以使用json在python程序之间分享数据,你还可以使用json在python程序之间分享数据,更重
要的是,json数据格式并非python专用的,这让你能够将以json格式存储的数据与使用其他编程语言的人分享

注意:json(javascriptObject notation)格式最初是javascript开发的,被包括python在内的众多语言采用
"""
# 导入json模块
import json
number = [1,2,3,4]

with open('number.json','w') as f_obj:
    json.dump(number,f_obj)
  number文件内容
 
  [1, 2, 3, 4]
# _*_ coding:utf-8 _*_
"""
file:json.dump-举例.py
date: 2018-07-上午8:52
author:ting
desc:
写入
"""
import json
username = raw_input('what is your name?')
filename = 'username.json'
with open(filename,'w') as f_obj:
    json.dump(username,f_obj)
    print 'we will rember you~~,%s' % username

这里写图片描述

username文件

"little wang"
# _*_ coding:utf-8 _*_
"""
file:json.dump-举例-02.py
date: 2018-07-上午8:59
author:ting
desc:
追加
"""
import json
username = raw_input('what is your name?')
filename = 'username.json'
with open(filename,'a') as f_obj:
    json.dump(username,f_obj)
    print 'we will rember you~~,%s' % username

这里写图片描述

username文件

"little wang""lily"

####json模块

# _*_ coding:utf-8 _*_
"""
file:json.load.py
date: 2018-07-上午8:38
author:ting
desc:
把文件中的内容读取出来
"""
import json
filename = 'number.json'
with open(filename) as f_object:
    # 我们使用函数json.load加载存储在number.json中的信息
    # 并将其存储到变量number中
    number = json.load(f_object)
print number

这里写图片描述

# _*_ coding:utf-8 _*_
"""
file:json.load-举例.py
date: 2018-07-上午8:58
author:ting
desc:
输出
"""
import json

filename = 'username.json'
with open(filename) as f_object:
    username = json.load(f_object)
    print 'welcome back,%s' % username

这里写图片描述
###综合应用

# _*_ coding:utf-8 _*_
"""
file:综合应用.py
date: 2018-07-上午9:02
author:ting
desc:
需求:
如果以前存储了用户,就显示
否则,就提示用户输入用户名并存储它
"""
import json
filename = 'username.json'
try:
    with open(filename) as f_obj:
        username = json.load(f_obj)
except ValueError:
    username = raw_input('what is your name?')
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
        print 'we will rember you~~'
# 依赖于try代码块成功执行的代码都应放到else代码块中
else:
    print 'welcome back %s' % username

这里写图片描述
#拓展(OS模块)

In [1]: ls
file

In [2]: import os

In [3]: ls
file

In [4]: os.rename('file','westos')  #重命名

In [5]: ls
westos

In [6]: os.remove('westos')  #删除文件

In [7]: ls

In [8]: os.mkdir('test')  #建立目录

In [9]: ls   #成功建立
test/

In [10]: os.rmdir('test')  #删除目录

In [11]: ls

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值