Python基础(2)

文件

  • 打开文件
    open(文件名,访问模式)
#以只读模式打开文件,指针放在文件的开头。这是默认模式,不输入"r"也能执行。
f = open("demo.txt","r")

#写入模式打开文件。如果该文件已存在则将其覆盖,不存在则创建新文件。
f = open("demo.txt","w")

#追加写入模式打开文件。如果文件存在则在其末尾追加写入内容,不存在则创建新文件。
f  = ("demo.txt","a")

常用的文件访问模式就这三种。
- 关闭文件
close()

#以写入模式打开文件
f = open("demo.txt","w")

#关闭这个文件
f.close()

补充:打开一次文件就关闭一次文件,打开三次就关闭三次。
- 读取文件
- read()
函数默认读取文件内全部数据。输入整数参数可以设定每次读取的字符数。
“`python
f = open(“demo.txt”,”r”)

    #每次只读取5个字符
    print(f.read(5))
    ```
- readlines()
读取全部数据,以换行符为单位,每一行内容存储在列表中。
    ```python
    f = open("demo1.txt","r")
    #列表储存每一行的内容
    print(f.readlines())

    #打印结果如下
    ['hello world!\n', 'hello aCandy!\n', 'hello Python!\n', 'hello Java!']
    ```
- readline()
以换行符为单位,每次只读取一行内容。

- 写入文件
write(输入内容)

#以写入方式打开文件
f = open("demo1.txt","w")

#向文件里输入内容
print(f.write("hello world!"))
  • 复制文件
#获取用户要复制的文件名
fileName = input("请输入要复制的文件名:")

#以读取方式访问用户要复制的文件
f_read = open(fileName,"r")

#查找文件名中后缀前"."的位置,从右向左查找更准确。
findName = fileName.rfind(".")
#以"."的角标位置为准,将"."前的文件名字符加上"[附件]"加上"."后的文件字符得到一个新的文件名。
newName = fileName[:findName]+"[附件]"+fileName[findName:]

#写入新文件
f_write = open(newName,"w")

第一种方式
#读取的内容赋值
content = f_read.read()
#写入新文件
f_write.write(content)

第二种方式
for lineContent in  f_read.readlines():
    f_write.write(lineContent)

第三种方式
while True:
    lineContent  = f_read.readline()
    if  len(lineContent)>0:
        f_write.write(lineContent)
    else:
        break

关闭两个读写文件
f_write.close()
f_read.close()
  • with open() as x函数
    常规读取文件方法
    python
    try:
    f = open('/path/to/file', 'r')
    print(f.read())
    #无论文件读取是否出现异常都关闭文件。
    finally:
    f.close()

    但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
    python
    with open('/path/to/file', 'r') as f:
    print(f.read())

文件定位

  • tell()
    定位当前文件读取的角标
f = open("demo2.txt","w+")
f.write("hello aCandy")
print(f.tell())

#打印结果如下
12
#角标定位到了12,如需要继续写入或读取,从此位置开始。
  • seek(偏移量,定位位置)
    指定指针位置,偏移量很好理解。定位位置可输入三个数字,0代表文件开头,1表示当前位置,2表示文件末尾。

  • os.rename()
    文件重命名,需要导入os包

#导包
import os

#将"demo2.txt"重命名为"test.txt"
os.rename("demo2.txt","test.txt")
  • os.remove()
    删除文件
import os

#删除文件,支持路径。
os.remove("test.txt")
  • mkdir()
    创建文件夹
import os

#创建"aCandy"文件夹
os.mkdir("aCandy")
  • getcwd()
    获取当前路径
import os

#获取当前路径
print(os.getcwd())
  • chdir()
    修改当前路径
import os

#获取当前路径
print(os.getcwd())

#更改当前路径
os.chdir("./aCandy")
print(os.getcwd())
  • listdir()
    将当前路径下的所有文件名以列表形式存储。
import os

print(os.listdir())

以class定义,并首字母大写。类里面的每个函数第一个参数都必须是self.

#类名首字母大写,规则同其他语言。
class Dog():
    #构造函数,两边各有两个下划线,且第一个参数必须是self
    def __init__(self,name,age):
        self.name = name
        self.age = age

    #自定函数,参数原则同上。
    def sit(self):
        print(self.name.title()+"is now sitting")
    def roll_over(self):
        print(self.name.title()+"rolled over")

#创建对象,并传值。
my_dog = Dog("willie",6)

#调用函数
my_dog.sit()
my_dog.roll_over()

#输出对象变量所赋的值
print("my dogs name is "+my_dog.name.title()+".")
print("my dogs age is "+(str)(my_dog.age)+" years old")
  • __init__(self,xxx)
    Python类的构造函数,第一个参数必须是self。
    注意:该函数两边各有两个下划线

    class Person():
    
        #创建对象后,sel是该对象的引用,所以传入的参数可以self调用赋值。
        def __init__(self,name,age):
            self.name = name
            self.age = age
  • 添加属性
    类中未定义的属性或变量可在创建对象后定义并赋值。

    
    #定义类
    
    class Person():
        #未输入构造函数,自定函数,还是需要在参数后加上self
        def eat(self):
            print("------eat-----")
        def demo(self):
            print("demo")
    
    
    #创建对象
    
    demoPerson = Person()
    
    #调用函数
    
    demoPerson.demo()
    demoPerson.eat()
    
    
    #"color"是类中未定义的属性,创建对象后亦可直接添加赋值。
    
    demoPerson.color = "yello"
    
    demoPerson.high = "169"
    
    
    #输出亦不会抛出异常。
    
    print(demoPerson.color)
  • 继承

异常

  • try… except…
    捕获异常关键字代码。

    
    #将可能出现异常的代码放入try代码块中
    
    try:
        print(a)
    
    
    #如出现异常就执行except里面的代码。
    
    except:
        print("not defind")
    • 捕获多个异常,执行同种方式

      try:
          open("desdfs.txt")
          print(a)
      
      
      #多个异常名时,需要用逗号分割,并包含括号。(Python2不需要括号)
      
      except (NameError,FileNotFoundError):
          print("not defind")
    • 输出异常信息
      关键字:as xxx(变量名)

      try:
          print(a)
      
      
      #"as"关键字后面加上自定的变量名用于存储异常信息
      
      except (NameError,FileNotFoundError) as result:
      
          #将异常信息一同输出
          print("not defind...%s"%result)
      
      
      #输出结果如下:
      
      not defind...name 'a' is not defined
    • 捕获所有异常
      异常名太多,无法一一指定时的异常捕获,并输出异常信息。
      “`python
      try:
      print(a)

      需要在”except”后面加上关键字”Exception”关键字才能使用”as”关键字,否则会报错。

      except Exception as result:
      print(“not defind…%s”%result)

  • try… except… else…
    当try里面的代码没有出现异常的时候才会执行else里面的代码。

    try:
        a= 10
        print(a)
    except Exception as result:
        print("not defind...%s"%result)
    
    
    #try代码块中没有出现异常,所以else下的代码会被执行。
    
    else:
        print("yes")

    else作用:没有else语句,当执行完try语句后,无法知道是没有发生异常,还是发生了异常并被处理过了。通过else可以清楚的区分开。

  • try… finally…
    finally:无论是否抛出异常都会执行的代码块。

    try:
        #a= 10
        print(a)
    
    
    #抛出异常就执行。
    
    except Exception as result:
        print("not defind...%s"%result)
    
    
    #不抛出异常才执行。
    
    else:
        print("yes")
    
    
    #抛出与否都执行。
    
    finally:
        print("一定会执行")

异常的传递

异常所在的代码块(或所在的函数)如果没有对其进行处理且有层层调用的情况,异常便会返回给调用该代码的代码块(或调用该代码的函数),多层调用便会多层传递,这其中任何一个调用代码对该异常代码进行处理都不会报错。如多个调用者都没有对其进行处理,返回到最终时则会进行默认处理,即报错。

#异常代码在demo1()函数,但未进行捕获。
def demo1():
    print("demo1")
    print(num)

#demo2()函数调用demo1()函数,未捕获异常。
def demo2():
    print("demo2")
    demo1()

#demo3()函数调用demo2()函数,进行异常捕获。通过层层传递,最终demo1()的异常会返回给demo3()
def demo3():
    print("demo3")
    try:
        demo2()

    #demo3()函数捕获到demo1()传递过来的异常。
    except Exception as result:
        print("....%s"%result)

#调用demo3()函数。
demo3()

抛出自定义异常

自定义异常需要继承Exception类

#自定义异常类,继承自Exception超类
class TestException(Exception):

    #复写构造函数,自定义两个参数:字符长度和字符内容。
    def __init__(self,length,num):
        self.length = length
        self.num = num

try:
    #提示用户输入不超过两个长度的字符
    num1 = input("请输入不超过2个长度的字符:")

    #如果长度超过2,抛出异常。
    if len(num1)>2:

        #抛出异常关键字,"raise"。抛出自定义异常(同时创建该自定义异常类对象)
        #传入错误字符的长度和错误字符
        raise TestException(len(num1),num1)

#捕获异常,此时的"result"就是TestException对象。
except TestException as result:
    print("---error-----")
    #"result"此时就是异常类对象,所以可以通过调用对象内的变量获取值。
    print("您输入错误,字符长度是%s,输入的内容是%s"%(result.length,result.num))
else:
    print("输入正确")
  • yield
    带有该关键字的函数不是普通函数,是迭代器,顺序输出数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值