字典

字典四种创建方法:

1、

dic = dict()
print(dic)
# 相当于
dic1 = {}
print(dic1) # 输出
{}
{}

2、

dic = dict(one=1, two=2)
print(dic)
# 输出
{'one': 1, 'two': 2}

3、最常使用的定义字典方式

dic1 = {'name': 'abc', 'age': 20}
print(dic1) # 输出
{'name': 'abc', 'age': 20}

4、

dic1 = dict((('name', 'abc'), ('age', 18)))
print(dic1) # 输出
{'age': 18, 'name': 'abc'}

字典的copy(浅拷贝)

acc1 = {'name': 'aaa', 'account': {'credit': 3000, 'balance': 3000}}
acc2 = acc1.copy()
acc2['name'] = 'ccc'
print(acc1)
print(acc2)

输出:从输出可以看出,acc2的名字发生了改变,但是其它没有变化

那我把acc2的列表里面内容改了呢?

acc1 = {'name': 'aaa', 'account': {'credit': 3000, 'balance': 3000}}
acc2 = acc1.copy()
acc2['name'] = 'ccc'
print('acc1_dic-->', acc1)
print('acc2_dic-->', acc2) acc2['account']['balance'] = 2500
print('acc1_dic-->', acc1)
print('acc2_dic-->', acc2) print('acc1_dic-->', id(acc1['account']))
print('acc2_dic-->', id(acc2['account']))

从输出可以看出,更改了acc2列表里面的内容,acc1列表里面的也自动更改了,同时通过对比2个字典里面列表位置可以看出,都是引用一个内存地址。

总结:

通过以上例子说明,浅拷贝只在第一层数据改变时候生效,当有第二层数据时候,就是引用了。

集合(set)

1、去重功能

li = [1, 2, 3, 4, 5, 6, 2, 4, 5, ]
s1 = set(li)
print(s1) # 输出
{1, 2, 3, 4, 5, 6}

2、交集:取2个集合内共有部分

s1 = {1, 2, 3, 4, 5}
s2 = {2, 3, 6, 7} print(s1 & s2)
print(s1.intersection(s2)) # 另外一个写法 # 输出
{2, 3}
{2, 3}

3、并集:取2个集合内不同部分

s1 = {1, 2, 3, 4, 5}
s2 = {2, 3, 6} print(s1 | s2)
print(s1.union(s2)) # 另外一个写法
# 输出
{1, 2, 3, 4, 5, 6}

4、差集:属于集合A且不属于集合B

s1 = {1, 2, 3, 4}
s2 = {2, 3, 6, 8} print(s1 - s2)
print(s1.difference(s2)) # 另外一个写法 # 输出
{1, 4} s1 = {1, 2, 3, 4}
s2 = {2, 3, 6, 8} print(s2 - s1)
print(s2.difference(s1)) # 另外一个写法 # 输出
{8, 6}

5、对称差集:把2个交集内相同的去掉,取不同的内容

s1 = {1, 2, 3, 4}
s2 = {2, 3, 6, 8} print(s1 ^ s2)
print(s1.symmetric_difference(s2)) # 另外一个写法 # 输出
{1, 4, 6, 8}

6、子集:就是包含,谁包含谁,如果s1所有元素包含s2所有元素,那么s2就是s1的子集

s1 = {1, 2, 3, 4, 5}
s2 = {1, 2, 3} print(s1 <= s2)
print(s1.issubset(s2)) # 另外一个写法 print(s2.issubset(s1)) # 输出
False
False
True

7、父集:跟子集一样

s1 = {1, 2, 3, 4, 5}
s2 = {1, 2, 3} print(s1 >= s2)
print(s1.issuperset(s2)) # 另外一个写法 # 输出
True
True

文件操作(open)

文件操作主要使用open 及 with open语句进行文件操作。文件的打开,主要包含三步:

1、找到文件

2、打开文件(是用什么模式)

3、关闭文件

文件打开模式:

r: open for reading (default)

w: open for writing,truncating the file first

x: create a new file and open it for writing,if the file already exists,raises an `FileExistsError` (only python 3.x)

a: open for writing, appending to the end of the file if it exists

b: binary mode

+: open a disk file for updating (reading and writing)

r+: reading and writing 比较常用

w+: opens and truncates the file to 0 bytes 没啥卵用

a+: append

带b和不带b的区别:

1、读取上的区别,带b读取是字节,不带b读取是字符串。

2、如果在模式里面带b,encoding这个参数也不能使用了,代表你告诉python,不再需要你帮我处理,我直接跟二进制打交道,也就意味这,你拿到的数据是2进制的,写的时候也必须是2进制才可以。

so:你在写的时候需要把字符串转换为字节,才可以进行写入

f = open('utf-8.txt', 'ab')
f.write(bytes('陈', encoding='utf-8'))
f.close()

文件基本操作方法:

通过TextIOWrapper类里面可以看见文件操作有哪些方法

1、read: 在文件比较大的时候不推荐使用,

这里的encoding编码意思是你告诉python你打开的时候是以什么编码方式打开,如果打开乱码,基本都是因为这里设置有问题造成的

如果你的文件是以GBK保存的,这里就改为GBK,如果是用utf-8,这里就改为utf-8就对了

read() 无参数:读取全部内容

    有参数:根据打开模式,如果有b,就按照字节读取,无b按照字符读取

f = open('test', encoding='utf-8')
data = f.read()
print(data)
f.close()

2、write

这个时候追加的信息会放到最后,那能不能调整写的位置呢?

f = open('test', 'r+', encoding='utf-8')
data = f.read()
print(data)
f.write('')
f.close() # 输出
1111
2222
3333
4444
5555
中文

3、seek: 调整指针位置(与打开模式没有关系,按照字节)

seek永远是以字节的方式去寻找位置,这个千万记住了

把888写到指针1的位置后边,并且覆盖了原来的111

f = open('test', 'r+', encoding='utf-8')
data = f.read()
f.seek(1)
print(data)
f.write('')
f.close() # 输出
1888
2222
3333
4444
5555
中文

4、tell: 获取当前指针位置(与打开模式没有关系,按照字节)

test文件内容:

陈1888

f = open('test', 'r+', encoding='utf-8')
data = f.read(1)
print('--->', f.tell())
print(data)
f.close() # 输出
---> 3

5、readline: 一行一行读

f = open('test', 'r+', encoding='utf-8')
print(f.readline().strip())
print(f.readline().strip()) f.close()

6、truncate: 截断数据

这个例子意思是:保留前5个字节内容,后边全部不要

f = open('test', 'r+', encoding='utf-8')
f.seek(5) # 把指针调整到第5个位置
f.truncate()
f.close()

7、readlines: 按行读取并返回列表

f = open('test', 'r+', encoding='utf-8')

data = f.readlines()
print(data)

8、最常用的使用循环一行一行读取文件

f = open('test', 'r+', encoding='utf-8')

for line in f:
print(line.strip())

9、flush:强制把内存的信息立刻写入的硬盘中

文件操作(with open)

1、with open 方式跟open的操作基本一样,是用with open 可以不用显性的是用f.close(),它自动进行关闭。

2、with open 方式支持同时打开2个以上的文件,这个open是不可以的。

with open('test') as f1 , open('test1') as f2:
data1 = f1.read()
data2 = f2.read()
print(data1)
print(data2)

复制test文件前2行到test2文件

with open('test') as f1, open('test2', 'x') as f2:
count = 0
for line in f1:
if count < 2:
f2.write(line)
count += 1
else:
break

Python入门3的更多相关文章

  1. python入门简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  2. python入门学习课程推荐

    最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化 ...

  3. Python运算符,python入门到精通[五]

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.在计算器语言中运算符大致可以分为5种类型:算术运算符.连接运算符.关系运算符.赋值运 ...

  4. Python基本语法[二],python入门到精通[四]

    在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解. ...

  5. Python基本语法,python入门到精通[二]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ...

  6. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  7. python入门教程链接

    python安装 选择 2.7及以上版本 linux: 一般都自带 windows: https://www.python.org/downloads/windows/ mac os: https:/ ...

  8. Python学习【第二篇】Python入门

    Python入门 Hello World程序 在linux下创建一个叫hello.py,并输入 print("Hello World!") 然后执行命令:python hello. ...

  9. python入门练习题1

    常见python入门练习题 1.执行python脚本的两种方法 第一种:给python脚本一个可执行的权限,进入到当前存放python程序的目录,给一个x可执行权限,如:有一个homework.py文 ...

  10. Python入门版

    一.前言 陆陆续续学习Python已经近半年时间了,感觉到Python的强大之外,也深刻体会到Python的艺术.哲学.曾经的约定,到现在才兑现,其中不乏有很多懈怠,狼狈. Python入门关于Pyt ...

随机推荐

  1. AXUre

    [ Javascript ] 一.javascript能用来干什么? 1.数据的验证. 2.对动态这本写到网页当中. 3.可以对事件做出响应. 4.可以读写html 中的内室. 5.可以检测浏览器 6 ...

  2. layabox 引擎

    layabox H5引擎性能之王LayaAir http://ldc.layabox.com/

  3. Asp.net Web.Config - 配置元素 httpCookies

    1.属性   属性 说明 domain 可选的 String 属性. 设置 Cookie 域名. httpOnlyCookies 可选的 Boolean 属性. 脚本(javascript之类)能够访 ...

  4. android view:布局优化

    今天在图书馆看了一个android性能优化. 关于布局优化有几个小技巧: 1.尽量减少布局的嵌套,而使用相对布局,这样的话会减少布局对象的创建,并且可以再事件传递的时候减少传递嵌套. 2.使用incl ...

  5. Linux下mysql忘记root密码

    一台机器上的MYSQL服务器很久没用了,忘了root密码无法连接.一时情急,网上搜寻办法,解决,记录在此备用. 修改MySQL的登录设置:  //不同的版本的Linux配置文件的位置也不一样,以Lin ...

  6. Android DownloadProvider学习 (二)

    DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个类的具体功能会在后面穿插介绍.DownloadManager的源码可见 ...

  7. Shell脚本检测文件夹是否已被挂载的方法

    方法1: if grep -qs '/mnt/foo' /proc/mounts; then echo "It's mounted." else echo "It's n ...

  8. 利用 ipset 封禁大量 IP

    使用 iptables 封 IP,是一种比较简单的应对网络攻击的方式,也算是比较常见.有时候可能会封禁成千上万个 IP,如果添加成千上万条规则,在一台注重性能的服务器或者本身性能就很差的设备上,这就是 ...

  9. bash 取文件特定行

    比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!

  10. 《C专家编程》第二章——这不是Bug,而是语言特性

    无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...