day03

上周回顾_问题总结:

  1. 地址值:
li = []
name = ['name','price','count']
dic = {}  #如果这里定义空列表,后边的dic[name[i]] = l2[i],就会把原来的值的地址替换掉;
with open("a.txt",mode="r+") as f:for line in f:l2 = line.strip().split()# print(l2)# dic = {}for i in range(len(l2)):dic[name[i]] = l2[i]  #有则改之,无责增加,每次进来都是把原来的替换了,每次替换还是指代的原来的地址值,直接使得# 原来append的列表的值也发生变化。print(dic)print(li)li.append(dic)print(li)
#运行结果
{'name': 'apple', 'price': '10', 'count': '3'}
[]
[{'name': 'apple', 'price': '10', 'count': '3'}]
{'name': 'tesla', 'price': '100000', 'count': '1'}
[{'name': 'tesla', 'price': '100000', 'count': '1'}]
[{'name': 'tesla', 'price': '100000', 'count': '1'}, {'name': 'tesla', 'price': '100000', 'count': '1'}]  #之前的apple已经消失。
{'name': 'mac', 'price': '3000', 'count': '2'}
[{'name': 'mac', 'price': '3000', 'count': '2'}, {'name': 'mac', 'price': '3000', 'count': '2'}]
[{'name': 'mac', 'price': '3000', 'count': '2'}, {'name': 'mac', 'price': '3000', 'count': '2'}, {'name': 'mac', 'price': '3000', 'count': '2'}]
{'name': 'lenovo', 'price': '30000', 'count': '3'}
[{'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}]
[{'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}]
{'name': 'chicken', 'price': '10', 'count': '3'}
[{'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}]
[{'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}]

本周内容

1. is、==、id

a = "alex"
b = "alex"
>>> print(a==b)  # ==是数值相等比较
True
>>> print(a is b)  #is是内存地址比较
True
>>> a = "%a"
>>> b = "%a"
>>> print(a == b)
True
>>> print(a is b)  #
False
>>> print(id(a),id(b))  # id 测试的是内存地址
2415540340416 2415540340304
>>> print(a,b,id(a),id(b))
%a %a 2415540340416 2415540340304#小数据池 str int
#小数据池存在的意义就是节省内存。
#int:-5 -- 256
#str:#1,不能含有特殊字符。#2,单个元素*int不能超过21.

2. 编码二

编码类型

ascii 数字,字母 特殊字符。
字节:8位表示一个字节。
字符:是你看到的内容的最小组成单位。
abc : a 一个字符。
中国:中 一个字符。

    a : 0000 1011unicode: 万国码起初:   a : 0000 1011 0000 1011中: 0000 1011 0000 1111升级:  a : 0000 1011 0000 1011 0000 1011 0000 1011中: 0000 1011 0000 1111 0000 1011 0000 1011utf-8:最少用8位表示一个字符。a: 0000 1011欧洲: 0000 1011 0000 1011亚洲中:0000 1011 0000 1011 0000 1011gbk:国标a: 0000 1011中:0000 1011 0000 1011 两个字节。

编码进阶

1,不同编码之间的二进制是不能互相识别的。
2,对于文件的存储,及传输 不能是unicode的编码。
python3x
int
bool
bytes:内部编码方式:(非unicode,utf-8,gbk.gb2312...)
str : 内部编码方式unicode
list
dict
tuple

bytes:内部编码方式:(非unicode,utf-8,gbk.gb2312...)
str : 内部编码方式unicode字母:str:表现形式:s1 = 'alex'内部编码:unicodebytes:表现形式:s2 = b'alex'内部编码:非unicode中文:str:表现形式:s1 = '中国'内部编码:unicodebytes:表现形式:b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'内部编码:非unicode

示例:

s1 = 'alex'
b1 = s1.encode('utf-8')  # s1是字符串,是unicode编码,使用encode,改成utf-的编码,字符类型是bytes类型,用字节表示。
print(b1,type(b1))#结果:b'alex' <class 'bytes'>s1 = 'alex'
# str ---> bytes encode 编码
b1 = s1.encode('utf-8')
print(b1)
#bytes---> str  decode 解码
s2 = b1.decode('utf-8')
print(s2)#用什么编码,就要用什么区解码

3. 集合

集合概念

1,集合 要求它里面的元素,可哈希的,不可变,元素不重复,无序。集合本身是不可哈希的。set1 = {} 1,关系测试。2,去重。

集合实例

# 列表的去重
set1 = {1,1,2,2,3,4,4,5}
print(set1)
l1 = [1, 1, 2, 2, 3, 4, 4, 5]
print(l1)
print(list(set(l1)))#结果:
{1, 2, 3, 4, 5}
[1, 1, 2, 2, 3, 4, 4, 5]
[1, 2, 3, 4, 5]#set1.clear()  #清空
print(set1)  # set()表示一个空集合set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}# 交集 & intersection
# print(set1 & set2)
# print(set1.intersection(set2))#并集 | union
# print(set1 | set2)
# print(set1.union(set2))# 差集 - difference
# print(set1 - set2)
# print(set1.difference(set2))
# print(set2 - set1)#反交集 ^ symmetric_difference
# print(set1 ^ set2)
# print(set1.symmetric_difference(set2))# 子集
# set1 = {1, 2, 3}
# set2 = {1, 2, 3, 4, 5, 6}
# print(set1 < set2)
# print(set1.issubset(set2))# 超集
# set1 = {1, 2, 3}
# set2 = {1, 2, 3, 4, 5, 6}
# print(set2 > set1)
# print(set2.issuperset(set1))# set1 = {1, 2, 3}
# print(frozenset(set1))

4.深浅copy

三种方式

三种
1. =   都共用地址值
2.浅copy  第一层独立,后边的地址值一样
3.深copy  无论多少层,地址都是独立的a = [1,2,[1,2,3]]
b = a
print(a[2][1],b[2][1],id(a[2][1]),id(b[2][1]))浅copy
a = [1,2,[1,2,3]]
b = a.copy()
print(a[2][1],b[2][1],id(a[1]),id(b[1])) 第二层一样了id地址值已经切片是浅copy
s1 = [1, 2, 3, [11, 22]]
s2 = s1[:]
print(s1, s2,id(s1),id(s2))  #这是第一层独立的地址值s1[-1].append(666)
print(s1, s2,id(s1[-1]),id(s2[-1]))  两个都加上了666,因为在第二层地址是一样的。s1.append(666)
print(s1, s2,id(s1),id(s2))   只有s1加上了666,因为第一层地址是独立的。# 深copy
import copy
s1 = [1, 2, 3,[11,22]]
s2 = copy.deepcopy(s1)
s1.append(666)
print(s1, s2)s1 = [1, 2, 3,[11,22]]
s2 = copy.deepcopy(s1)
s1[-1].append(666)
print(s1, s2)
# 深copy 无论多少层,都是互相独立的。

5.文件操作

文件基础

护士主妇空姐嫂子联系方式.txt文件路径path:d:....  # 可以加r,解决路径特殊字符转义的问题编码方式encoding:gbk,utf-8....  #文件用什么编码写的,就要用什么编码打开操作方式mode:读,写,读写,写读,追加,改......f1 文件句柄,f,file,file_hander,f_h....open()调用的内置函数,内置函数调用的系统内部的open,windows默认gbk编码,linux默认utf-8编码;一切对文件进行的操作都是基于文件句柄f1.

实例1:

with open(r"歌单1",encoding="utf-8") as f1:print(f1.read())
windows下创建的文件默认编码是gbk,但是pycharm创建的是utf-8,英文没有区别,都能使用,中文就不可以print(f1.read(9))print(f1.readline())print(f1.readlines())  ['fdsafds\n', '中国\n', '你妹妹'] 生成一个列表格式,需要用strip去除换行符with open(r"歌单1",encoding="utf-8",mode="r+") as f1:for line in f1:print(line)print(f1.readlines())f1.write("lalala")print(f1.read())  read从光标位置开始读取,先write后,光标位置在写入的值后边,读取不到写入的东西了就with open(r"2.jpg",mode='rb') as f1, open("new.jpg", mode='wb') as f2:  #没有编码规则,直接就是以字节的形式读取,写入,编码是字符的编码规则content = f1.read()f2.write(content)file = open(r'C:\Users\Administrator\Desktop\1.jpg',mode='rb')  #  带b的bytes类型,编码是非unicode,自己做了优化,自动判断是utf-8或者是gbk等。
content = file.read()
print(content)f = open('image1.jpg',mode='wb')
f.write(content)
file.close()
f.close()with open('歌单1',encoding='utf-8',mode='a+') as f1:# f1.write("追加")# f1.seek(0)# print(f1.read())# print(f1.tell())# f1.seek(1)# print(f1.tell())print(f1.readable())修改歌单1
以读的模式打开源文件
以写的模式打开新文件
import os
with open('歌单1',encoding='utf-8') as f1, \open('新歌单',encoding='utf-8',mode='a+') as f2:content = f1.read()f2.write(content)f2.write("""爱情伤了多少人的心  # 可以加\n实现换行
听心
微风细雨""")
os.remove('歌单1')
os.rename('新歌单','歌单1')import os
with open('歌单1',encoding='utf-8') as f1, \open('新歌单',encoding='utf-8',mode='a+') as f2:for line in f1:f2.write(line)f2.write("""爱情伤了多少人的心  # 可以加\n实现换行
听心
微风细雨""")
os.remove('歌单1')
os.rename('新歌单','歌单1')

实例2:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# f1 = open(r'd:/嫂子护士联系方式.txt', encoding='gbk', mode='r')
# print(f1.read())
# f1.close()# f1 = open('log1', encoding='gbk', mode='r')
# print(f1.read())
# f1.close()"""
f1 文件句柄,f,file,file_hander,f_h....
open()调用的内置函数,内置函数调用的系统内部的open,
一切对文件进行的操作都是基于文件句柄f1.
执行流程: 1,打开文件,产生文件句柄。2,对文件句柄进行操作。3,关闭文件句柄。"""# 读  r
# 1 read() 全读出来
# f1 = open('log1', encoding='utf-8')
# content = f1.read()
# print(content)
# f1.close()#2 read(n) 读一部分
# f1 = open('log1', encoding='utf-8')
# content = f1.read(3)
# print(content)
# f1.close()# f1 = open('log1', mode='rb')
# print(f1.read(3).decode('utf-8'))
# f1.close()
#r 模式 read(n)  n 按照字符读取。
#rb 模式 read(n)  n 按照字节读取。# #3 readline() 按行读取
# f1 = open('log1', encoding='utf-8')
# print(f1.readline())
# print(f1.readline())
# print(f1.readline())
# f1.close()#4 readlines()
# f1 = open('log1', encoding='utf-8')
# print(f1.readlines())
# f1.close()# 5 for 循环
# f1 = open('log1', encoding='utf-8')
# for line in f1:  循环是读取所有文件内容,但是只占用一个内存地址。read这种会又多少内容,占用多少内存地址。
#     print(line)
# f1.close()# f1 = open('1.jpg', mode='rb')
# print(f1.read())
# f1.close()# r+ 读写  先读后写
# f1 = open('log1', encoding='utf-8', mode='r+')
# # print(f1.read())
# # f1.write('666')
# f1.write('a')
# print(f1.read())
# f1.close()# 写:w
# w 没有文件,新建文件写入内容
# 有原文件,先清空内容,在写入新内容。
# f1 = open('log2', encoding='utf-8', mode='w')
# f1.write('桃白白fdksagdfsa')
# f1.close()# 图片的读取及写入
# f1 = open('1.jpg', mode='rb')
# content = f1.read()
#
# f2 = open('2.jpg', mode='wb')
# f2.write(content)
# f1.close()
# f2.close()# w+ 先写后读
# f1 = open('log2', encoding='utf-8', mode='w+')
# f1.write('两款发动机了')
# f1.seek(0)
# print(f1.read())
# f1.close()# 追加 a
#  a 没有文件,新建文件写入内容# f1 = open('log3', encoding='utf-8', mode='a')
# # f1.write('alex 666')
# f1.write('\nalex 666')
# f1.close()# a+
# f1 = open('log3', encoding='utf-8', mode='a+')
# f1.write('python22期')
# f1.seek(0)
# print(f1.read())
# f1.close()#其他操作方法
# readable 是否可读
# writable 是否可写
# f1.seek(12)  # 任意调整
# f1.seek(0,2) #光标调整到最后
# f1.seek(0) #光标调整到开头
# f1.tell() # 告诉光标的位置
# f1.truncate(3)  # 按照字节对原文件进行截取 必须在a 或 a+ 模式# f1 = open('log3', encoding='utf-8', mode='a+')
# # f1.write('python22期')
# # print(f1.read())
# print(f1.readable())
# print(f1.writable())
# f1.close()# f1 = open('log2', encoding='utf-8')
# f1.read()
# print(f1.tell())
# print(f1.seek(0))
# print(f1.seek(0,2))
# f1.seek(12)  # 任意调整
# f1.seek(0,2) #光标调整到最后
# f1.seek(0) #光标调整到开头
# print(f1.tell()) # 告诉光标的位置
# f1.close()# f1 = open('log3', encoding='utf-8', mode='a+')
# f1.truncate(3)  # 按照字节对原文件进行截取 必须在a 或 a+ 模式
# f1.close()# 不用主动关闭文件句柄,
# with open('log1', encoding='utf-8') as f1,\
#     open('log2', encoding='utf-8', mode='w') as f2:
#     content = f1.read()
#     f2.write(content)# with open('log1', encoding='utf-8') as f1:
#     print(f1.read())
#     f1.close()
#     pass
#     with open('log1', encoding='utf-8',mode='w') as f2:
#         f2.write('666')# 文件的改
# 1,以读模式打开原文件。
# 2,以写的模式打开一个新文件。
#3,将原文件读出按照要求修改将修改后的内容写入新文件。
import os
with open('file', encoding='utf-8') as f1,\open('file.bak', encoding='utf-8', mode='w') as f2:old_content = f1.read()new_content = old_content.replace('alex', 'SB')f2.write(new_content)os.remove('file')
os.rename('file.bak', 'file')
#4,删除原文件。
# 5,将新文件重命名原文件。#升级版本# import os
# with open('file', encoding='utf-8') as f1,\
#     open('file.bak', encoding='utf-8', mode='w') as f2:
#     for line in f1:
#         new_line = line.replace('SB','alex')
#         f2.write(new_line)
#
# os.remove('file')
# os.rename('file.bak', 'file')
with open('log1', encoding='utf-8', mode='w') as f1:f1.write('111')f1.write('666')f1.write('333')f1.write('222')

6. 函数

return

#return
# 1,终止函数。
# 2,给函数的执行者返回值。
"""return  或者 return Nonereturn 单个值return 多个值 会将多个值放到一个元组中,将元组返回个函数的执行者"""

传参

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# s = 'lkfjsjulkjdgjdsf'
# count = 0
# for i in s:
#     count += 1
# print(count)
#
# l1 = [1, 2, 3, 4, 5, 6]
# count = 0
# for i in l1:
#     count += 1
# print(count)# 重复代码多。
# 可读性差。
# s = 'lkfjsjulkjdgjdsf'
# print(len(s))# s = 'lkfjsjulkjdgjdsf'
# def my_len():
#     count = 0
#     for i in s:
#         count += 1
#     print(count)
'''
def 关键字 函数名():函数体函数执行:函数名()
函数:以功能为导向。
'''
# my_len()# s = 'lkfjsjulkjdgjdsf'
# def my_len():
#     count = 0
#     for i in s:
#         count += 1
#
#
# print(my_len())
#return
# 1,终止函数。
# 2,给函数的执行者返回值。
"""return  或者 return Nonereturn 单个值return 多个值 会将多个值放到一个元组中,将元组返回个函数的执行者"""
# def func1():
#     print(111)
#     print(222)
#     return
#     print(333)
# func1()# def func1():# print(111)# print(222)# return 666# return 'alex'
#     return 'alex', 666, [1, 2, 3]
#
# ret = func1()
# print(ret,type(ret))
# s = 'lkfjsjulkjdgjdsf'
# def my_len():
#     count = 0
#     for i in s:
#         count += 1
#     return count
#
# print(my_len())#函数的传参# def my_len(argv):  # 形式参数 ,形参
#
#     count = 0
#     for i in argv:
#         count += 1
#     return count
# s = 'lkfjsjulkjdgjdsf'
# l1 = [1, 2, 3, 4, 5]
# # my_len(s)  # 实际参数, 实参
# print(my_len(l1))# 实参角度# 位置参数  按照顺序一一对应# def func1(a, b, c):#     print(a, b, c)# func1(1, 2, 'alex')# def max(a, b): return a if a > b else b# ret = 1 if 2 > 1 else 6# print(ret)# print(max(10, 2))# 关键字传参  一一对应。# def func2(a, b):#     print(a, b)# func2(b=2, a=3)# 混合参数。(位置参数,关键字参数) 关键字参数必须在位置参数后面。# def func3(a, b, c, d):#     print(a, b, c, d)# func3(1,2,d=3,c=5)#形参角度# 位置参数。按顺序一一对应。# def func1(a, b, c):
#     print(a, b, c)
# func1(1, 2, 'alex')
## 默认参数。 默认参数在位置参数的后面。# def func1():
#     print(a, b, c)
# func1(1, 2, 'alex')
# def login(name,sex='男'):
#     with open('register', encoding='utf-8', mode='a') as f1:
#         f1.write('{},{}\n'.format(name,sex))
#
#
# while True:
#     name = input('请输入姓名:').strip()
#     if '1' in name:
#         login(name)
#     else:
#         sex = input('请输入性别:').strip()
#         login(name,sex)# 动态参数。 *args, **kwargs 万能参数。# args:所有的位置参数,放在一个元组中。#kwargs:所有的关键字参数,放在一个字典中。def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。print(args)print(kwargs)
# func3(1, 2, 3, 'alex', c=6, name='wusir', age='21')
# func3(*[1, 2, 3],*(22, 33))  #函数的执行的时候 * 代表打散。
func3(**{'name':"alex","price":"18"},**{'age':23})  #函数的执行的时候 * 代表打散。
结果:
()
{'name': 'alex', 'price': '18', 'age': 23}
# func3(1, 2, 3, 22, 33)  #函数的执行的时候 * 代表打散。# 形参的顺序  位置参数 *args, 默认参数,**kwargs
# def func5(a,b,*args,sex='男',**kwargs):
#     print(a,b,)
#     print(args)
#     print(sex)
#     print(kwargs)

day03_雷神_文件操作相关推荐

  1. python文件替换一行_python基础_文件操作实现全文或单行替换的方法

    这篇文章主要介绍了关于python基础_文件操作实现全文或单行替换的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python修改文件时,使用w模式会将原本的文件清空/覆盖.可以 ...

  2. Python基本语法_文件操作_读写函数详解

    目录 目录 软件环境 file文件对象 open文件操作 读文件 read读取所有文件内容 readline获取一行内容 readlines读取所有文件内容 readreadlinereadlines ...

  3. python之路_文件操作解析

    文件操作 一.操作文件三要素 1. 路径    #文件存放的具体位置的路径 2. 编码    #文件打开的的编码格式:utf-8 3. 模式 - rb:以字节的方式只读 obj = open('D:\ ...

  4. python引入文件并执行_文件操作和导入os模块执行文件和目录管理操作

    文件概念以及文本文件和二进制文件的区别 计算机的CPU如果想要访问保存在磁盘上的文件,第一步需要把磁盘上的文件数据加载到内存中.因为内存的读写速度要比磁盘的读写速度快很多. 计算机只能识别0101这种 ...

  5. Python(42)_文件操作

    #-*-coding:utf-8-*- ''' 文件操作-只读,要制定编码,编码与制定的编码会乱码 ''' f = open('傻逼.txt',mode='r',encoding='utf-8') c ...

  6. C语言基础教程_文件操作

    文章目录 前言 一.文件的概念 1.1文件的定义 1.2磁盘文件的分类 二.文件指针 三.打开文件fopen 四.关闭文件fclose 五.一次读写一个字节 5.1 fgetc 5.2 fputc 六 ...

  7. java常用的分隔符_*文件操作类1(基本操作)分隔符的使用

    Java IO学习原则:抽象类中定义的抽象方法会根据实例化其子类的不同,也会完成不同的功能. 使用File类来进行文件的操作. 如果要进行所有的文件以及文件内容的开发操作,那么应该使用java.io包 ...

  8. python文件例题_文件操作练习题

    ''' 1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数. apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 ...

  9. java 边读边写文件_文件操作--边读边写,在指定位置添加内容(避免乱码)

    [java]代码库/** * @param lineNumber 选择要添加内容的行数 * @param attribute1 选择要添加的内容1 * @param attribute2 选择要添加的 ...

最新文章

  1. Android-SharedPreferences
  2. vmware搭建ubuntu虚拟机(包含安装搜狗输入法和apt,dpkg的使用教程)
  3. 2019.3.23 python的unittest框架与requests
  4. 安卓APP_ 控件(7)——Toolbar栏目样式
  5. 【HDU - 1266 】Reverse Number(模拟,数字分位数处理)
  6. VC++ 多线程同步实例
  7. 小熊的日记图文列表布局小程序模板
  8. 机器学习代码实战——K折交叉验证(K Fold Cross Validation)
  9. js高级学习笔记(b站尚硅谷)-2-数据、变量、内存三者的关系
  10. 软工网络15团队作业4-DAY2
  11. 图书管理系统 C语言
  12. 代码审计之JAVA代码审计洞态IAST系统以及SecExample靶场
  13. 人类的历史就是一部创业史
  14. 远程主机关闭了一个现有连接python_python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054 | 学步园...
  15. HTML如何使用隐藏图片,css3如何隐藏图片?
  16. PDF页眉页脚删除用什么方法
  17. 黎曼zeta函数不需解析延拓
  18. pytorch 源_Windows10+CUDA 10.1.0+pytorch安装过程
  19. Sentiment分析app评论情感
  20. Yii框架中集成phprpc、hprose

热门文章

  1. openlayers加载天地图及天地图地形图影像图
  2. mac 重置系统关机启动参数,重置电脑闪存数据
  3. 【Java】注解入门
  4. 008--【SpringBoot】过滤器,拦截器,切面
  5. 08 python 集合
  6. easyExcel 复杂表头 动态表头
  7. 异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
  8. org.hibernate.MappingException: Unknown entity常见问题(新手需注意)
  9. 视频直播app和网页版怎么开发?
  10. 【报告分享】丁香园矩阵建设及商业价值分析报告-新榜 (附下载)