python 推导后续 枚举 文件流

求m,n中矩阵各个元素的乘积
  m = [[1,2,3],[4,5,6],[7,8,9]]

  n = [[2,2,2],[3,3,3],[4,4,4]]

#5.求m,n中矩阵各个元素的乘积     我想说这真是干货  反正我是会了 不知道看博客的各位了  你们要是不会 我想说 怪我表达能力 我可以语言  文字有点难 
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
#通过下标获取各个元素
#通过for循环的方法
for i in range(len(m)):
#获取  m  列表的下标[[1,2,3]-->1  [4,5,6]-->2  [7,8,9]-->3 ]   为 1 2 3
    for j in range(len(m[i])):  #这个是获取 嵌套列表里面的下标
        print(m[i][j]*n[i][j],end=' ')   #  end=' '  表示 不换行
        #打印为:2 4 6 12 15 18 28 32 36
#通过推导的方法
s=[m[i][j]*n[i][j] for i in range(len(m)) for j in range(len(m[i]))]
print(s,end='   ')
#打印为:[2, 4, 6, 12, 15, 18, 28, 32, 36]
#另一种方法: 这种方法和上面的大同小异      推导  套  推导    row 行    col  列
s1=[[m[row][col]*n[row][col] for col in range(len(m[row]))] for row in range(len(m))]
print(s1)
#打印为:  [[2, 4, 6], [12, 15, 18], [28, 32, 36]]   是这个样子   我相信大家是可以看懂的  
#就是先把大列表的下标循环一次  然后循环嵌套列表里面的三次  

#6.结合两个列表的元素,如果元素之间不相等的话
a=[1,2,3]
b=[4,2,6]
c=[6,8,2]

#6.结合两个列表的元素,如果元素之间不相等的话    很简单
a=[1,2,3]
b=[4,2,6]
c=[6,8,2]
#用for循环遍历  
for i in a:
    for j in b:
        for k in c:
            if i!=j and i!=k and  j!=k:   #判断 不相等
                print((i,j,k),end=' ')
#打印为:(1, 4, 6) (1, 4, 8) (1, 4, 2) (1, 2, 6) (1, 2, 8) (1, 6, 8) (1, 6, 2) (2, 4, 6) (2, 4, 8) (2, 6, 8) 
# (3, 4, 6) (3, 4, 8) (3, 4, 2) (3, 2, 6) (3, 2, 8) (3, 6, 8) (3, 6, 2) 
print([(i,j,k) for i in a for j in b  for k in c if i!=j and i!=k and  j!=k]) #用推导  建议使用推导 因为简单
#打印为:[(1, 4, 6), (1, 4, 8), (1, 4, 2), (1, 2, 6), (1, 2, 8), (1, 6, 8), (1, 6, 2), (2, 4, 6), 
# (2, 4, 8), (2, 6, 8), (3, 4, 6), (3, 4, 8), (3, 4, 2), (3, 2, 6), (3, 2, 8), (3, 6, 8), (3, 6, 2)]
#它其实就这么简单 不要想复杂  你看过后就想说 要这么简单么 过分

枚  举  : 了解一下

1.  首先你得导入   enum  模块         from enum import Enum 

2. 枚举定义用 class 关键字, 继承Enum类。  语法:     class    类名 (Enum)

3. 用于定义枚举的class和定义类的class是有区别

from  enum import Enum     # 首先你得导入模块

class color(Enum):     # 这里你需要继承    我们创建的是一个color的枚举
    '''
    对于一些既定的值 不允许随意赋值的量
    每个成员的数据类型  就是它所属的枚举
    自定义的类\枚举   又叫自定义数据类型
    '''
    red = 1               #我们创建了七个枚举类型
    green = 2              #每一个成员都有它们各自名称和值,Color.green成员的名称是:green,值是:1。
    orange = 3
    yellow = 4
    blue = 5
    gray = 6
    black = 7  

4. 定义枚举时,成员名称不允许重复    重复会报错

from enum import Enum

class Color(Enum):
    red = 1
    red = 2            #你要是这样就会报错 代码无法执行
5. 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名,如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员.
from enum import Enum

class Color(Enum):
    red = 1
    new_red = 1

print(Color(1))

#打印为 : Color.red      这是有顺序的  如果 
                                        new_red  =1 
                                         red  =1    是这个样子   那么打印出来的 是Color.new_red

6.如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】

from enum import Enum, unique       # 模块需要导入   记住

@unique      #装饰器   应该写在这     注意
class Color(Enum):
    red = 1
    new_red = 1

print(Color(1))

注:   如果在进行打印 会报错

7.枚举取值

   7.1  通过成员的名称来获取成员

          7.2  通过成员值来获取成员

               7.3 通过成员,来获取它的名称和值

from enum import Enum

class Color(Enum):
    red = 1
    green = 2
    orange = 3

#通过成员的名称来获取成员   格式为: 类名[' 输入枚举成员名称 ']
print(Color['red'])
# 打印为 :Color.red

#通过成员值来获取成员    格式为: 类名( 输入枚举成员值  )
print(Color(2))
# 打印为 :Color.green

#通过成员,来获取它的名称和值
col=Color['orange']
print('枚举数据 的名字: ',col.name)   
print('枚举数据的值 : ',col.value)
#打印为 :枚举数据 的名字:  orange
#打印为; 枚举数据的值 :  3

8. 枚举支持迭代器,可以遍历枚举成员,  如果枚举有值重复的成员,循环遍历枚举时

获取值重复成员的第一个成员

from  enum import Enum

class color(Enum):
    red = 1
    new_red = 1
    green = 2
    orange = 3
    yellow = 4
    blue = 5
    gray = 6
    black = 7
for i in color:
    print(i,end=' ')
# 打印为: color.red color.green color.orange color.yellow color.blue color.gray color.black

注 : 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__

from  enum import Enum

class color(Enum):
    red = 1
    new_red = 1
    green = 2
    orange = 3

for i in color.__members__.items():
    print(i,end=' ')
# 打印为:('red', <color.red: 1>) ('new_red', <color.red: 1>) ('green', <color.green: 2>) ('orange', <color.orange: 3>)

9.  枚举比较  

         枚举成员可进行同一性比较   用    is       is   not     返回值为 True 或  False

from  enum import Enum

class color(Enum):
    red = 1
    new_red = 1
    green = 2
    orange = 3

print(color.red is  color.red)   #打印为: True
print(color.red is not color.red)   #打印为: False
print(color.red is  color.green)   #打印为: False
print(color.red is not color.green)   #打印为: True

       枚举成员可进等值比较     用   ==      返回值为 True 或  False

from  enum import Enum

class color(Enum):
    red = 1
    new_red = 1
    green = 2
    orange = 3

print(color.red ==  color.red)   #打印为: True
print(color.red == color.green)   #打印为: False

        枚举成员不能进行大小比较      

from  enum import Enum

class color(Enum):
    red = 1
    new_red = 1
    green = 2
    orange = 3

print(color.red > color.green)  #这样会报错  成员不能比较大小
# 下面这种是 进行值比较大小 可以进行     返回值为  False   True
print(int(color.red.value) > int(color.red.value))  #打印为  False 
print(int(color.red.value) <  int(color.green.value))#打印为  True


Python   文件流

        Python提供了必要的函数和方法进行默认情况下的文件基本操作。

1.open函数     你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅

助方法才可以调用它进行读写。 

   语法:      file object = open(file_name [, access_mode]  [, buffering])

各个参数所代表的的含义: 

     file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。

    access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a

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

。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结

尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式

。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。

如果该文件不存在,创建新文件用于读写。

    buffering: 如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

File对象的属性  

      一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。

以下是和file对象相关的所有属性的列表:

1.file.name   返回文件的名称。

2.file.mode    返回被打开文件的访问模式。

3.file.closed    如果文件已被关闭返回true,否则返回false。

让我们来个例子证明上面所述:

file = open('foo.txt','a+')    #    myfile=open("路径",'打开方式')
print("文件名: ",file.name)
print("是否已关闭 : ",file.closed)
print("访问模式 : ",file.mode)
#输出为:
#文件名:  foo.txt
#是否已关闭 :  False
#访问模式 :  a+

close()方法

    close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯

语法:     fileObject.close()

file = open('foo.txt','a+')
file.close()
print("是否已关闭 : ",file.closed)  
#输出为
#打印为:  是否已关闭 :  True   文件已经关闭

write()方法

   write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法在字符串的结尾时应手动添加换行符('\n')  

file = open('foo.txt','a+')
print("文件名: ",file.name)
print("是否已关闭 : ",file.closed)
print("访问模式 : ",file.mode)
file.write('Python is a great language.\nYeah its great!!\n')
# 运行的时候直接添加到创建的文件里面  运行几次 就添加几次
file.close()
file.write('Python is a great language.\nYeah its great!!\n')
#已经关闭文件,不能再往里面写 运行时会报错
print("是否已关闭 : ",file.closed)
#输出为
#文件名:  foo.txt
#是否已关闭 :  False
#访问模式 :  a+
#打印为:  是否已关闭 :  True   文件已经关闭

read()方法

      read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

   语法:   fileObject.read([count])   

                               括号里面的内容代表可选参数  什么都不填表示读取全部  添加表示读取到第几个字节

file = open('new.txt','r+')
#file.write('Python is a great language.\nYeah its great!!\n')
str=file.read()
print('读取到的数据: ',str)
'''
输出为   
读取到的数据:  Python is a great language.
               Yeah its great!!
会读取到全部文件 但不会读取到换行符

'''
str=file.read(6)   #括号里面输入多少  则打印多少个字节   如果输入的超过本身的字节 也不会报错
print('读取到的数据: ',str)
'''
输出为:  读取到的数据:  Python
'''

tell()

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

file = open('new.txt','r+')
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
'''
输出为: 
读取到的数据:  Python is  当前位置:  10
读取到的数据:  a great la 当前位置:  20
'''

seek(offset [,from])

         seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

   如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

file = open('new.txt','r+')
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell(),)
file.seek(0,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
file.seek(10,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
file.seek(5,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
'''
输出为: 
读取到的数据:  Python is  当前位置:  10
读取到的数据:  Python is  当前位置:  10
读取到的数据:  a great la 当前位置:  20
读取到的数据:  n is a gre 当前位置:  15

重命名和删除文件

      Python的   os模块    提供了帮你执行文件处理操作的方法,比如重命名和删除文件。

要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。

语法:  impor   os

rename()

            rename()方法需要两个参数,当前的文件名和新文件名。

   语法:    os.rename(current_file_name, new_file_name)

import os
os.rename('foo.txt','new_foo.txt')

remove()

   remove()方法删除文件,需要提供要删除的文件名作为参数

import os
os.remove('new_foo.txt')

mkdir()

   mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。

import os
os.mkdir('new_file')

chdir()

chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。

    getcwd()
        getcwd()方法显示当前的工作目录。
import os
print('当前目录: ',os.getcwd())
os.chdir('./new_file')   #  .  点代表当前目录
print('当前目录: ',os.getcwd())
'''
输出为:
当前目录:  D:\python07\python高级
当前目录:  D:\python07\python高级\new_file
'''

rmdir()

       rmdir()方法删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。

import os

os.rmdir('new_file/输入流')  #这是逐级删除  /   表示分割


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值