Python 学习笔记(3)

Python 文件I/O

 

读取键盘输入:

Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘:

1. raw_input

#函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)
str = raw_input("请输入:")
print ("你输入的内容是: ", str)

#结果:
请输入:Hello Python!
你输入的内容是:  Hello Python!

 

注:python3以后的版本就将该函数删除了(可能是和input太像了,input完全可以替代它)

2.input

input([prompt]) 函数和 raw_input([prompt]) 函数基本类似
str = input("请输入:")
print "你输入的内容是: ", str

# input 可以接收一个Python表达式作为输入,并将运算结果返回
#结果:
请输入:[x*5 for x in range(2,10,2)]
你输入的内容是:  [10, 20, 30, 40]

 

把数据输入到文件中

fp = open('text.txt', 'a+')
print("helloWorld", file=fp)
fp.close()
注意:要写成file=fp 如果只写fp会创建新文件,但不会再文件内输入内容

参数类型:

b : 二进制模式

+ :打开一个文件进行更新(可读可写)

r :以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式

w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

 

write()方法

write()方法不会在字符串的结尾添加换行符(‘\n’):

# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
 
# 关闭打开的文件
fo.close()


$ cat foo.txt 
www.runoob.com!
Very good site!

 

read()方法

#在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,
#如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
fo = open("foo.txt", "r+") str = fo.read(10) print "读取的字符串是 : ", str 读取的字符串是 : www.runoob

 

文件定位

tell():方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后

seek(offset [,from]):

offset:要移动的字节数

from:指定开始移动字节的参考位置 0:文件的开头  1: 当前的位置 2: 文件的末尾

# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
 
# 查找当前位置
position = fo.tell()
print "当前文件位置 : ", position
 
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print "重新读取字符串 : ", str
# 关闭打开的文件
fo.close()


读取的字符串是 :  www.runoob
当前文件位置 :  10
重新读取字符串 :  www.runoob

 

python 异常处理

语法:

try:
<语句>        #运行别的代码
except <名字><语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

例如:

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

 

使用exception不带任何异常类型

此时try-except语句捕获所有发生的异常。

但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。

try-fnally语句

try-finally 语句无论是否发生异常都将执行最后的代码

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
finally:
    print "Error: 没有找到文件或读取文件失败"

 

异常的参数

一个异常可以带上参数,可作为输出的异常信息参数。

# 定义函数
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

# 调用函数
temp_convert("xyz");

$ python test.py 
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

 

触发异常

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception,"Invalid level!"
        # 触发异常后,后面的代码就不会再执行
try:
    mye(0)            # 触发异常
except Exception,err:
    print 1,err
else:
    print 2


$ python test.py 
1 Invalid level!

 

自定义异常

异常应该是典型的继承自Exception类,通过直接或间接的方式。

class Networkerror(Exception):
    def __init__(self, arg):
        self.args = arg


try:
    raise Networkerror("bad hostname")
except Networkerror as e : #e 是用于创建Networkerror类的实例 注:3.9版本后都改用as,之前版本可以用逗号,
    print(e.args)