文件
文件的概念和形式
文件是数据抽象和集合。
文件是存储在辅助存储器上的数据序列,是数据存储的一种形式。
文件展现有两种形态:文本形式和二进制文件。
本质上,所有的文件都是二进制形式存储。
文本形式:由单一特定编码组成的文件(如UTF-8编码),也被看成存储着的长字符串,.txt、.py文件等
二进制形式:直接由比特01组成,无统一的字符编码,适用于.png文件、.avi文件
文件的操作
文件的打开和关闭
a = open( , ) <变量名> = open(<文件名>,<打开模式>)
a.close()
文件的关闭(python可能会缓冲我写入的数据,所以使用完文件后就及时关闭文件)
1、使用try/finally语句,在finally语句中调用close
#打开文件
try:
#将数据写入文件
finally:
file.close()
2、with语句(专门设计来关闭文件)
with open("somefile.txt") as somefile:
do_something(somefile)
with语句让我打开文件并将其赋值给一个变量,然后再对文件写入数据,到达该语句末端时,将会自动关闭文件。
文件的读取和写入
seek():指定指针到内容的某个特定位置。
tell():返回当前位于文件的什么位置。
列表
1、list():创建或者转换成列表;在使用 list() 函数创建列表时,一定要注意双括号。
可以使用 list() 函数将字符串、元组、字典和集合等其他类似对象转换为列表
2、下标索引访问的是元素
3、使用for循环遍历列表中的项目
4、使用 in 关键字检查列表中是否存在指定项时,如果存在,则返回 True ;反之,则返回 False
5、更改列表值
num_list = [0,3,1,6]
num_list[2] = 6
print(num_list)
[0,3,6,6]
6、列表之间可以使用+和*实现元组的连接和复制,意味着生成应该新的列表
7、嵌套列表:使用嵌套列表即在列表里面创建其他列表
当嵌套列表后,列表中的元素数量为内含的列表个数,如下代码的len(z)=2
x = [1,2,3]
y = ['haha']
z = [x,y]
print(z)
[[1,2,3],['haha']]
8、列表的比较
列表比较需要引入 operator 模块的 eq 方法
# 导入 operator 模块
import operator
a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a, b):", operator.eq(a, b))
print("operator.eq(b, c):", operator.eq(b, c))
operator.eq(a, b): False
operator.eq(b, c): True
9、内置函数
(1)len()函数:确定一个列表有多少元素
(2)type()函数:确定变量是什么类型(字符串、列表、元组、字典或集合)
使用 type() 确定变量类型时,会返回<class 'list'>
,表明这是一个列表
(3)list()函数:转化成类型为列表
将字典转换为列表
dict1 = {'Hello': 'Python', 'name': 'pink'}
print(list(dict1))
['Hello', 'name']
字典转化列表默认转化的是字典键值
dict = {}
print(list(dict))
print(list(dict.keys())) 同上一句打印出键
print(list(dict.values())) 打出值
print(list(dict.items())) 打印出键值对
()
(4)del 函数不仅可以实现删除某个元素,还可以删除整个列表。
当我们使用 del 函数删除某列表后,再使用 print() 函数打印输出时,会报错NameError: name 'list_de' is not defined
,表明该列表未被定义。
10、内置方法
(1)append()方法:用于在列表末尾添加新的对象
(2)insert()方法:用于将指定对象插入列表的指定位置
list.insert(position, element) insert() 可以在任意位置添加元素或列表
(3)extend()方法:用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.extend(iterable)必需:任何可迭代对象(列表、集合、元组等)
(4)count() 方法用于统计某个元素在列表中出现的次数。
(5)index()方法:用于从列表中找出某个值第一个匹配项的索引位置
当被搜索值在列表中多次出现时,仅返回首次出现的位置
(6)sort()方法用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
list.sort(reverse=True|False, key=myFunc) Ture是降序排列,False是升序排列
(7)copy()方法:copy() 方法用于复制列表,类似于 a[:]
(8)reverse() 方法:用于反向列表中元素
(9)删除元素 pop()、remove()、clear()
pop() 方法用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
remove() 方法用于移除列表中某个值的第一个匹配项。当被删除的元素在列表中存在多个时,默认删除首次出现的那个。
clear() 方法用于清空列表,类似于 del a[:]
clear() 方法的作用是清空列表,执行结束后对其使用 print() 打印输出时,会输出 []
,说明列表还存在,只是空列表而已。
元组
元组是有序且不可更改的集合。元组使用圆括号 ()
编写的
元组的创建很简单,使用圆括号 () 直接创建或者使用 tuple() 函数创建,只需要在圆括号中添加元素,并使用逗号隔开即可
当元组中只包含一个元素时,需要在元素后面添加逗号,
,否则括号会被当作运算符使用
元组是不可变的,或者也被称为恒定的。所谓元组的不可变性指的是元组所指向的内存中的内容不可变。
但是有一种解决方法:可以先将元组转换为列表,更改列表值,然后再将其转换回元组
字典
Python字典是另一种可变容器模型,可存储任意类型对象。如字符串、数字、元组等其他容器模型
因为字典是无序的所以不支持索引和切片
注意
- key不可以重复,否则只会保留第一个;
- value值可以重复;
- key可以是任意的数据类型,但不能出现可变的数据类型,保证key唯一;
- key一般形式为字符串
1、基本操作:增删查改
(1)增:字典名[new key]=new value
(2)删:del 字典名[key]
(3)查:value=字典名[key]
(4)改:字典名[key]=new value
图形交互界面
GUI交互式
python图形界面教程(tkinter)_python图形化界面-CSDN博客
图像化编程的基本步骤通常包括:
- 导入 tkinter 模块
- 创建 GUI 根窗体
- 添加人机交互控件并编写相应的函数。
- 在主事件循环中等待用户触发事件响应。
窗体控件布局
from tkinter import *
root = Tk()
root.title('我的第一个python窗体')
root.geometry('480x480')
root.mainloop()
tkinter常用控件
控件的共同属性
relief= FLAT(平的)、RAISED(凸起的)、SUNKEN(凹陷的)、GROOVE(沟槽状边缘)和 RIDGE(脊状边缘)
控件布局
控件的布局通常有pack()
、grid()
和 place()
三种方法
pack()方法:是一种简单的布局方法,如果不加参数的默认方式,将按布局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保持控件本身的最小尺寸。
使用pack()方法可设置 fill、side 等属性参数。其中,参数fill 可取值:fill=X,fill=Y或fill=BOTH,分别表示允许控件向水平方向、垂直方向或二维伸展填充未被占用控件。参数 side 可取值:side=TOP(默认),side=LEFT,side=RIGHT,side=BOTTOM,分别表示本控件实例的布局相对于下一个控件实例的方位。
grid()方法:是基于网格的布局。先虚拟一个二维表格,再在该表格中布局控件实例。由于在虚拟表格的单元中所布局的控件实例大小不一,单元格也没有固定或均一的大小,因此其仅用于布局的定位。pack()方法与grid()方法不能混合使用。
column: 控件实例的起始列,最左边为第0列。
columnspan: 控件实例所跨越的列数,默认为1列。
ipadx,ipady: 控件实例所呈现区域内部的像素数,用来设置控件实例的大小。
padx,pady: 控件实例所占据空间像素数,用来设置实例所在单元格的大小。
row: 控件实例的起始行,最上面为第0行。
rowspan: 控件实例的起始行数,默认为1行。
place()方法:根据控件实例在父容器中的绝对或相对位置参数进行布局。其常用布局参数如下:
x,y:控件实例在根窗体中水平和垂直方向上的其实位置(单位为像素)。注意,根窗体左上角为0,0,水平向右,垂直向下为正方向。
relx,rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值在0.0~1.0之间。
height,width:控件实例本身的高度和宽度(单位为像素)。
relheight,relwidth:控件实例相对于根窗体的高度和宽度比例,取值在0.0~1.0之间。
利用place()方法配合relx,rely和relheight,relwidth参数所得的到的界面可自适应根窗体尺寸的大小。place()方法与grid()方法可以混合使用。如下例子:利用place()方法排列消息(多行标签)。
知识杂记
1、【字符串】strip可以把字符串开头和末尾的空白删除,并返回删除后的结果
还可以在一个字符串参数中指定要删除的哪些字符.strip('*!'):可以删除头尾的*和!字符
>>>"**ha*ha*ha!!!***".strip('!*')
"ha*ha*ha"
2、【函数】使用 ord('a')+i 配合 range()函数 可以遍历一个连续的字符表。
3、【文件】for line in f方式获得的每行内容(在变量line中)包含换行符,所以,要通过strip()函数去掉换行符后再进行统计。这里,空行指没有字符的行。
用len(line)== 0判断是不是空行。
continue的使用
当判断line不是空行时,执行continue后不执行s += 1的语句,继续循环语句。
4、【字典】d ={}这是定义了一个字典,get()函数用于访问字典
5、【print】end=' '意思是末尾不换行,加空格
为末尾end传递一个空字符串,这样print函数不会在字符串末尾添加一个换行符,而是添加一个空字符串
6、【字符串】split与join的作用相反,用于将字符串拆分成序列。
>>>'/ha/haha/666'.split('/')
[",'ha','haha','666']
如果没有指定的分隔符,将会默认在单个或者多个连续的空白字符处拆分(空格、制表符、换行符)
7、【字符串】append() 方法用于在列表中添加新的对象
疑问
1、如何打印出转义字符\n?(显示出就是在屏幕上打印\n)
在转义字符前加上一个斜杆:print("\\n")
2、print()
默认情况下,print()
函数的end
参数为\n
,这意味着在每次调用print()
函数时都会打印一个换行符。但是可以将end
参数设置为其他字符,例如空格或逗号,以在每行的末尾使用不同的字符。
3、因为不同类型的不可以相加
for i in range(2):
print(i)
#这种可以执行
for i in range(2):
print(i+":")
#这种不可以执行呢
4、import pprint有什么作用?
pprint() 模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果。
5、end=""不换行
为什么这里仍然会换行呢?
6、当到达文件末尾时,方法read将会返回一个空字符串,但是如果文件数据中含有空字符比如说是空字符,那么不会提前循环结束吗?
def process(string):
print("processing",string)
with open(file_name) as f:
char = f.read(1)
while word:
process(char)
char = f.read(1)
7、模块sys的三个标准流是什么,有什么作用?
8、上下文管理器是什么,有什么作用?
9、print(f.closed)的作用?
def demo_with(file_name):
with open(file_name,'r') as in_file:
for line in in_file:
print(line,end='')
print('Still in with.Is file closed?',in_file.closed)
print('After with block.Is file closed?',in_file.closed)
print可以用来做调试。 打印出文件是否关闭的信息吧。
用于判断文件流信息是否关闭,文件操作,多数使用 with...as...
语句。
10、类和对象也就是.的区别