赞
踩
目录
若出现下面错误:
可能是因为在安装Python的过程中没有勾选 Add Python 3.7 to PATH 选项,此时需要手动对Python进行配置。
配置如下:
在windows命令行中输入pip -V可以查看pip的版本。
若出现以下错误:
可能是因为在安装Python的过程中没有勾选 Add Python 3.7 to PATH 选项,此时需要手动对pip进行配置。
配置如下:
命令 | 说明 |
pip install 包名 | 安装指定的包 |
pip uninstall 包名 | 删除指定的包 |
pip list | 显示已经安装的包 |
pip freeze | 以指定的格式显示已经安装的包 |
运行pip install 命令会从网站上下载指定的python包,默认是从 https://files.pythonhosted.org/ 网站上下载。这是个国外的网站,遇到网络情况不好的时候,可能会下载失败,我们可以通过命令,修改pip现在软件时的源。
命令格式:
pip install 包名 -i 国内源地址
国内常用的pip下载源列表:
......
方式一:exit() ->回车
方式二:ctrl+z ->回车
1.运行Pycharm,选择 Create New Project ,创建一个新的Python工程。
2.选择'Pure Python'创建一个新的纯Python工程项目, Location 表示该项目的保存路径, Interpreter 用来指定Python解释器的版本。
4.在弹出的对话框中输入的文件名 ,点击OK,表示创建一个Python程序的文本文件,文本文件后 缀名默认.py。
5.设置Python Script:
6.创建新的python文件,将会自动生成以下内容:
单行注释
- # 快捷键:ctrl+/
- # 打印一句话
- print('hello world') # 单行注释常写在代码的上方,而不是代码的右方
'运行
多行注释
- # 以'''开始,以'''结束
- '''
- 佛祖保佑
- 永无bug
- '''
'运行
- # 定义一个变量表示这个字符串,如果需要修改内容,只需要修改变量对应的值即可
- weather = '今天天气真好'
- print(weather)
- print(weather)
- print(weather)
-
- # 应用场景:爬取网页上图片的URL,用img变量保存并打印出来
- img = 'https://img14.360buyimg.com/n0/jfs/t1/9937/32/16620/170423/6274e112E8708e4ee/eaf45b30010eb33e.jpg'
- print(img)
'运行
注意
在 Python 里为了应对不同的业务需求,把数据分为不同的类型。
- # Number 数值
- # int
- money = 100
- # float
- money1 = 1.2
-
- # boolean 布尔
- # 应用场景:流程控制语句、性别的变量(在工作中,性别变量使用的单词是sex/gender)
- # 男 True,女 False
- sex = True
- gender = False
-
- # string 字符串
- # 字符串使用的是单引号或者双引号
- s = '苍茫的天涯是我的爱'
- s2 = "hello world"
- # 不允许一单一双
- # s3 = 'hhh"
- # s4 = "aaa'
- # 单引号和双引号的嵌套
- s5 = '"哈哈哈"'
- print(s5)
- s6 = "'啊啊啊'"
- print(s6)
- # 不允许单引号套单引号,双引号套双引号
- # s7 = ''行还是不行呢''
- # s8 = ""行还是不行呢""
-
- # list 列表
- # 应用场景:当获取到了很多个数据的时候 那么我们可以将他们存储到列表中 然后直接使用列表访问
- name_list = ['郭靖','黄蓉']
- print(name_list)
-
- # tuple 元组
- age_tuple = (19,18)
- print(age_tuple)
-
- # dict 字典
- # 格式:变量名 = {key:value,key2:value2}
- # 应用场景:scrapy框架使用
- person = {'name':'郭靖','age':19}
- print(person)
'运行
查看数据类型
- # int
- a = 100
- # <class 'int'>
- print(type(a))
-
- # float
- b = 2.5
- # <class 'float'>
- print(type(b))
-
- # boolean
- c = True
- # <class 'bool'> bool是boolean的缩写
- print(type(c))
-
- # string
- d = '中国'
- # <class 'str'> str是string的缩写
- print(type(d))
-
- # list
- e = [1,2,3]
- # <class 'list'>
- print(type(e))
-
- # tuple
- f = (1,2,3)
- # <class 'tuple'>
- print(type(f))
-
- # dict
- g = {'name':'zhangsan'}
- # <class 'dict'>
- print(type(g))
'运行
- a = 'zhangsan' # bad
- student = 'zhangsan' # good
-
- b = 23 # bad
- age = 23 # good
'运行
函数 | 说明 |
int(x) | 将x转换为一个整数 |
float(x) | 将x转换为一个浮点数 |
str(x) | 将x转换为一个字符串 |
bool(x) | 将x转换为一个布尔值 |
- # 浮点数1.68转换为整数是1
- print(int(1.68))
-
- # 字符串"678"转换为整数是678
- print(int("678"))
-
- # 布尔值True转换为整数是1
- print(int(True))
-
- # 布尔值False转换为整数是0
- print(int(False))
'运行
注意
- # 整数123转换为浮点数是123.0
- print(float(123))
-
- # 字符串“12.34”转换为浮点数是12.34
- print(float(12.34))
-
- # 布尔值True转换为浮点数是1.0
- print(float(True))
-
- # 布尔值False转换为浮点数是0.0
- print(float(False))
'运行
注意
- # 整数666转换为字符串是"666"
- print(str(666))
-
- # 浮点数888.0转换为字符串是"888.0"
- print(str(888.0))
-
- # 布尔值True转换为字符串是"True"
- print(str(True))
-
- # 布尔值False转换为字符串是"False"
- print(str(False))
'运行
注意
- # 整数1转换为布尔值是True
- print(bool(1))
-
- # 整数2转换为布尔值是True
- print(bool(2))
-
- # 整数-1转换为布尔值是True
- print(bool(-1))
-
- # 整数0转换为布尔值是False
- print(bool(0))
-
- # 浮点数1.0转换为布尔值是True
- print(bool(1.0))
-
- # 浮点数0.0转换为布尔值是False
- print(bool(0.0))
-
- # 字符串“哈哈”转换为布尔值是True
- print(bool("哈哈"))
-
- # 字符串“ ”转换为布尔值是True
- print(bool(" "))
-
- # 字符串“”转换为布尔值是False
- print(bool(""))
-
- # 列表[1,2,3]转换为布尔值是True
- print(bool([1,2,3]))
-
- # 列表[]转换为布尔值是False
- print(bool([]))
'运行
以下情况结果均为False
- print(bool(0))
- print(bool(0.0))
- print(bool(''))
- print(bool(""))
- print(bool([]))
- print(bool(()))
- print(bool({}))
'运行
注意
运算符 | 描述 | 实例 |
+ | 加 | 3 + 2 的输出结果为5 |
- | 减 | 3 - 2 的输出结果为1 |
* | 乘 | 3 * 2的输出结果为6 |
/ | 除 | 3 / 2的输出结果为1.5 |
// | 取整除 | 5 // 3的输出结果为1 |
% | 取余 | 5 % 3的输出结果为2 |
** | 指数 | 3 ** 2的输出结果为9 |
() | 小括号 | 提高运算符优先级,比如:(1+2)*3的输出结果为9 |
注意
算术运算符在字符串中的使用
- str1 = 'hello'
- str2 = 'world'
- # helloworld
- print(str1 + str2)
'运行
- str3 = 'hello'
- a = 2
- # TypeError: can only concatenate str (not "int") to str
- # print(str3 + a)
- # hello2
- print(str3 + str(a))
'运行
- str4 = '你爱我 我爱你 蜜雪冰城甜蜜蜜'
- # 你爱我 我爱你 蜜雪冰城甜蜜蜜你爱我 我爱你 蜜雪冰城甜蜜蜜
- print(str4*2)
'运行
运算符 | 描述 | 实例 |
= | 赋值运算符 |
把
=
号右边的结果赋给左边的变量,如
num = 1 + 2 * 3
,结果
num
的值为
7
|
- # 单个变量赋值
- a = 1
- # 1
- print(a)
-
- # 同时为多个变量赋相同的值
- b = c = 2
- # 2
- print(b)
- # 2
- print(c)
-
- # 分别为多个变量赋值(逗号隔开)
- d,e,f = 3,3.14,"hello"
- # 3
- print(d)
- # 3.14
- print(e)
- # hello
- print(f)
'运行
- # +=
- a = 100
- a += 1 # a = a + 1
- # 101
- print(a)
-
- # *=
- b = 200
- b *= 2 # b = b * 2
- # 400
- print(b)
-
- # 符号右侧的表达式先计算结果,再与左边变量的值运算
- c = 300
- c *= 1 + 2 # c = c * (1 + 2)
- # 900
- print(c)
'运行
运算符 | 描述 | 实例 |
== | 等于(比较对象是否相等) | 10 == 20 返回False |
!= | 不等于(比较对象是否不相等) | 10 !=20 返回True |
> | 大于 | 10 > 20 返回False |
>= | 大于等于 | 10 >= 10 返回True |
< | 小于 | 10 < 20 返回True |
<= | 小于等于 | 10 <=20 返回True |
扩展
运算符 | 逻辑表达式 | 描述 | 备注 |
and | x and y |
只要有一个运算数是
False
,结果就是
False;
只有所有的运算数都为
True
时,结果才是
True。
做取值运算时,取第一个为
False
的值,如果所有的值
都为
True,
取最后一个值。
| 运算符and 、or做取值运算时,最终取什么值根据下方的性能提升来看的 |
or | x or y |
只要有一个运算数是
True
,结果就是
True;
只有所有的运算数都为
False
时,结果才是
False。
做取值运算时,取第一个为
True
的值,如果所有的值都为False,
取最后一个值。
| |
not | not x |
布尔
"
非
" -
如果
x
为
True
,返回
False
。如果
x
为
False
,它返回
True
。
|
- # and
- print(10 > 5 and 10 > 20) # False
- print(10 > 5 and 20 > 10) # True
- a = 1 and 0
- print(a) # 0
- b = 1 and True
- print(b) # True
-
- # or
- print(10 > 5 or 10 > 20) # True
- print(10 < 5 or 20 < 10) # False
- c = 1 or 2
- print(c) # 1
- d = 0 or False
- print(d) # False
-
- # not
- print(not 1) # False
- print(not False) # True
'运行
性能提升
若前面结果的真假就能够得出最终结果的真假,则不需要判断后面结果的真假;若前面结果的真假不能够得出最终结果的真假,则需要判断后面结果的真假。
- a = 20
- # 短路与
- a > 10 and print('hello world') # hello world
- a < 10 and print('hello world')
-
- # 短路或
- a > 10 or print('hello world')
- a < 10 or print('hello world') # hello world
'运行
- # 普通输出
- print('故事里的小黄花,从出生那年就飘着')
-
- # 格式化输出
- # 应用场景:scrapy框架的时候,会把爬取到的数据放到excel文件/mysql数据库/redis数据库,这时候需要格式化输出
- name = '春风吹又生'
- age = 19
- # %s 代表字符串 %d代表数值
- print('我的名字是%s,我的年龄是%d' % (name,age))
'运行
- # 输入
- password = input('请输入密码:')
- print("您输入的密码是:%s" % password)
'运行
注意
语法
- if 判断条件:
- 条件成立时,要运行的代码
案例1
- age = 20
- if age >= 18:
- print('我已经成年了')
-
- if age < 18:
- print('我还是未成年')
'运行
案例2:从键盘获取自己的年龄,判断是否大于或者等于18岁,如果满足条件就输出“我已经成年了”
- age = input('请输入您的年龄:')
- if int(age) >= 18:
- print('我已经成年了')
'运行
注意
- if 判断条件:
- 条件成立时,要运行的代码
- else:
- 条件不成立时,要运行的代码
案例1
- age = 19
- if age >= 18:
- print("我已经成年了")
- else:
- print("我还未成年")
'运行
案例2 :从键盘中输入身高,如果身高没有超过150cm,则进动物园不用买票,否则需要买票
- height = int(input("请输入您的身高(cm):"))
- if height <= 150:
- print("进动物园不用买票")
- else:
- print("进动物园需要买票")
'运行
- if xxx1:
- 事情1(条件1满足则执行)
- elif xxx2:
- 事情2(条件1不满足但是条件2满足则执行)
- elif xxx3:
- 事情3(条件1、2均不满足但是条件3满足则执行)
- ...
- else:
- 事情n(以上条件均不满足则执行)
案例:从键盘中输入成绩,根据成绩输出对应的等级
- score = eval(input("请输入您的成绩:"))
- if score >= 90:
- print("优秀")
- elif score >= 80:
- print("良好")
- elif score >= 70:
- print("中等")
- elif score >= 60:
- print("及格")
- else:
- print("不及格")
'运行
语法
- # 遍历(循环):一个一个的输出
- # for 变量 in 要遍历的数据:
- # 要执行的代码
'运行
遍历数字
- # range方法的结果是一个可遍历的对象,是一组数字
- # range(5) [0,5) 左闭右开
- for i in range(5):
- print(i)
-
- print("------")
-
- # range(1,6) [1,6)
- for i in range(1,6):
- print(i)
-
- print("------")
-
- # range(1,10,3) [1,10) 步长为3
- for i in range(1,10,3):
- print(i)
'运行
遍历字符串及其下标
- # 变量i用来保存字符串中的每个字符,s代表要遍历的字符串
- s = "china"
- for i in s:
- print(i)
-
- print("------")
-
- # 变量j用来保存字符串的下标,len函数返回字符串的长度
- for j in range(len(s)):
- print(j)
'运行
遍历列表中的元素及其下标
- # 应用场景:爬取到一个列表
- a_list = ["张三","李四","王五"]
-
- # 遍历列表中的元素
- for i in a_list:
- print(i)
-
- print("------")
-
- # 遍历列表中的下标
- for j in range(len(a_list)):
- print(j)
'运行
案例:1~100的和
- sum = 0
- for i in range(1,101):
- sum += i
- i += 1
- print("1~100的和为:%d" % sum)
'运行
- # 获取长度:len 获取字符串的长度
- s= "china"
- # 5
- print(len(s))
-
- # 查找内容:find 查找指定内容在字符串中是否存在,如果存在就返回该内容在字符串中第一次出现的开始位置索引值,如果不存在,则返回-1
- s2 = "Ccabc"
- # 1
- print(s2.find('c')) # 注意区分大小写
-
- # 判断:startswith,endswith 判断字符串是否以谁开头/结尾
- s3 = "abcdf"
- # True
- print(s3.startswith('a'))
- # False
- print(s3.endswith('g'))
-
- # 计算出现次数:count 返回 str在start和end之间 在 mystr里面出现的次数
- s4 = "aaabbc"
- # 2
- print(s4.count('b'))
- # 1
- print(s4.count('b',4,5))
-
- # 替换内容:replace 替换字符串中指定的内容,如果指定次数count,则替换不会超过count次
- s5 = "abcbc"
- # acccc
- print(s5.replace('b','c'))
- # accbc
- print(s5.replace('b','c',1))
-
- # 切割字符串:split 通过参数的内容切割字符串
- s6 = "1#2#3#4#5"
- # ['1', '2', '3', '4', '5']
- print(s6.split('#'))
-
- # 修改大小写:upper lower 将字符串中的小写转为大写 将字符串中的大写转为小写
- s7 = "China"
- # CHINA
- print(s7.upper())
- # china
- print(s7.lower())
-
- # 空格处理:strip 去空格
- s8 = " a "
- # 6
- print(len(s8))
- # 1
- print(len(s8.strip()))
-
- # 字符串拼接:join 字符串拼接
- s9 = ','
- # 1,2,3,4,5
- print(s9.join("12345"))
'运行
append
- # append 在列表末尾追加元素
- food_list = ["辣椒炒肉","酸菜炖鱼"]
- food_list.append("小鸡炖蘑菇")
- # ['辣椒炒肉', '酸菜炖鱼', '小鸡炖蘑菇']
- print(food_list)
'运行
insert
- # insert 在指定位置index插入元素object
- char_list = ['a','c','d']
- char_list.insert(1,'b')
- # ['a', 'b', 'c', 'd']
- print(char_list)
'运行
extend
- # extend 将另一个列表中的元素逐一添加到列表中
- num_list = [1,2,3,4]
- num_list2 = [4,5,6,7]
- num_list.extend(num_list2)
- # [1, 2, 3, 4, 4, 5, 6, 7]
- print(num_list)
'运行
del
- # del 根据元素的下标删除元素
- num_list = [1,2,3,4,5]
- del num_list[2]
- # [1, 2, 4, 5]
- print(num_list)
'运行
pop
-
- # pop 删除最后一个元素(不加index参数)
- num_list = [1,2,3,4,5]
- # [1, 2, 3, 4]
- num_list.pop() # del num_list[4]
- print(num_list)
'运行
remove
- # remove 根据元素的值删除元素
- num_list = [1,2,3,4,5]
- # [1, 2, 4, 5]
- num_list.remove(3)
- print(num_list)
'运行
in
- # in(存在)
- # 待查找的列表
- name_list = ["张三","李四","王五"]
- # 获取用户要查找的名称
- findName = input("请输入您要查找的名称:")
- # 查找是否存在
- if findName in name_list:
- print("%s在列表中" % findName)
- else:
- print("%s不在列表中" % findName)
'运行
not in
- # not in(存在)
- # 待查找的列表
- age_list = [18,19,20]
- # 获取用户要查找的年龄
- findAge = eval(input("请输入您要查找的名称:"))
- # 查找是否存在
- if findAge not in age_list:
- print("%d不在列表中" % findAge)
- else:
- print("%d在列表中" % findAge)
'运行
- city_list = ["北京","上海","广州","深圳","长沙"]
- # 通过指定下标来访问元素,赋新值即修改元素
- city_list[4] = "常德"
- # ['北京', '上海', '广州', '深圳', '常德']
- print(city_list)
'运行
Python的元组与列表类似,不同之处在于:
访问元组
- aTuple = ("hello",1,3.14)
- # 元组访问元素的方式与列表相同
- # 1
- print(aTuple[1])
'运行
修改元组
- aTuple = ("hello",1,3.14)
- # 元组的元素不能修改
- # TypeError: 'tuple' object does not support item assignment
- # aTuple[1] = 2
- # print(aTuple[1])
-
- # 元组的元素不能删除
- # TypeError: 'tuple' object doesn't support item deletion
- # del aTuple[2]
- # print(aTuple)
'运行
定义只有一个元素的元组
- # 定义只有一个元素的元组,需要在该元素的后面加一个逗号,否则就是整型数据
- bTuple = (1,)
- # <class 'tuple'>
- print(type(bTuple))
-
- cTuple = (1)
- # <class 'int'>
- print(type(cTuple))
'运行
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
常用的切片语法:
注意
- # 索引是通过下标取某一个元素
- # 切片是通过下标取某一段元素
- s = "hello world"
- # hello world
- print(s) # 直接打印字符串
-
- # e
- print(s[1]) # 索引
-
- # hello
- print(s[0:5]) # [0,5) 左闭右开
-
- # llo world
- print(s[2:]) # 从下标2开始,到后面所有的元素
-
- # hello wo
- print(s[:8]) # 从起始位置开始,到下标为7(不是下标为8)的元素
-
- # eoo
- print(s[1:10:3]) # 从下标为1开始,到下标为9的元素,步长为3
'运行
查找字典中的元素有两种方式:
这两种方式的区别:
注意
定义一个字典
person = {"name":"张三丰","age":19}
'运行
使用key键查看
- # 获取姓名
- # 张三丰
- print(person["name"])
- # KeyError: 'sex'
- # 查看不存在的key,会发生异常
- # print(person["sex"])
使用get函数查看
- # 19
- print(person.get("age"))
- # None
- print(person.get("sex"))
不能使用.来获取数据
- # AttributeError: 'dict' object has no attribute 'name'
- print(person.name)
为已存在key赋值就是修改。
- person = {"name":"张三","age":18}
- # {'name': '张三', 'age': 18}
- print(person)
-
- # 为已存在的键赋值就是修改
- person["name"] = "法外狂徒"
- # {'name': '法外狂徒', 'age': 18}
- print(person)
'运行
添加元素时,如果键不存在,就会添加这个元素。
添加元素时,如果键存在,就会修改这个元素。
- person = {"name":"老牛"}
- # 添加元素时,如果键不存在,就会添加这个元素
- # {'name': '老牛'}
- print(person)
- person["age"] = 19
- # {'name': '老牛', 'age': 19}
- print(person)
-
- # 添加元素时,如果键存在,就会修改这个元素
- # {'name': '老牛', 'age': 19}
- print(person)
- person["name"] = "老马"
- # {'name': '老马', 'age': 19}
- print(person)
'运行
del删除指定的元素
- person = {"name":"老马","age":19}
- # {'name': '老马', 'age': 19}
- print(person)
- # del删除指定的元素
- del person["age"]
- # {'name': '老马'}
- print(person)
'运行
del删除整个字典
-
- person2 = {"name":"老牛","age":19}
- # {'name': '老牛', 'age': 19}
- print(person2)
- # del删除整个字典
- del person2
- # NameError: name 'person2' is not defined
- # person2已经被删除了,未被定义
- # print(person2)
'运行
clear清空整个字典,但字典对象仍在
- person3 = {"name":"老鼠","age":19}
- # {'name': '老鼠', 'age': 19}
- print(person3)
- # clear清空整个字典,但字典对象仍在
- person3.clear()
- # {}
- print(person3)
'运行
定义一个字典
- # 定义一个字典
- student = {"name":"张三","age":19}
'运行
遍历字典的key(键)
- # 遍历字典的key(键)
- # key是变量名,keys()函数获取字典中所有的key值
- for key in student.keys():
- print(key)
遍历字典的value(值)
- # 遍历字典的value(值)
- # value是变量名,values()函数获取字典中所有的value值
- for value in student.values():
- print(value)
遍历字典的key-value(键值对)
-
- # 遍历字典的key-value(键值对)
- # key,value是两个变量名,items()函数获取字典中所有的元素
- for key,value in student.items():
- print("key=%s,value=%s" %(key,value))
遍历字典的项(元素)
- # 遍历字典的项(元素)
- # item是变量名,items()函数获取字典中所有的元素
- for item in student.items():
- print(item)
注意
语法格式
- def 函数名():
- 代码
'运行
案例
- # 定义一个函数,能够完成打印信息的功能
- def f1():
- print("故事的小黄花")
- print("从出生那年就开着")
'运行
定义完函数后,函数是不会自动执行的,需要调用它才可以执行。
语法
函数名()
案例
- # 定义完函数后,函数是不会自动执行的,需要调用它才可以执行
- f1()
分析以下代码的缺陷
- # 定义一个函数,实现两个数的和
- def add():
- a = 1
- b = 2
- c = a + b
- print(c)
-
- # 调用函数
- # 3
- add()
'运行
这个函数不通用,只能计算1+2,即如果我们想计算其它两个数的和,就不能用到这个函数了。
在定义函数的时候,可以让函数接收数据,就解决了这个问题,这就是函数的参数。
定义带参函数
- # 定义一个带参函数,实现两个数的和
- def add(a,b):
- c = a + b
- print(c)
-
- # 调用带参函数,实现2和3的和
- # 5
- add(2,3)
'运行
调用函数时参数的顺序
- # 位置参数
- # 7
- add(3,4)
-
- # 关键字参数
- # 7
- add(b = 4,a = 3)
形参和实参
返回值就是程序中函数完成一件事情后,最后给调用者的结果。
定义带有返回值的带参函数
- # 定义一个带有返回值的带参函数
- def add(a,b):
- c = a + b
- # return后可以写变量名
- return c
-
- def add2(a,b):
- # return后可以写计算表达式
- return a + b
'运行
调用函数并保存函数的返回值
- # 调用函数并保存函数的返回值
- # 使用一个result变量来保存add函数的返回值
- result = add(1,2)
- # 使用一个result2变量来保存add2函数的返回值
- result2 = add(2,3)
-
- # 打印变量result的结果
- # 3
- print(result)
- # 打印变量result2的结果
- # 5
- print(result2)
局部变量只能在函数内部使用,不能在函数外部使用。
全局变量既可以在函数外部使用,也可以在函数内部使用。
局部变量的作用域是函数内部,全局变量的作用域是整个程序。
局部变量
- def f1():
- # 定义局部变量b
- a = 100
- # f1函数的局部变量b只能在函数内部使用
- print(a)
-
- # NameError: name 'a' is not defined
- # f1函数的局部变量不能在函数外部使用
- # print(a)
'运行
全局变量
- # 定义全局变量b
- b = 200
- # 全局变量b既可以在函数外部使用
- print(b)
-
- def f2():
- # 全局变量b也可以在函数内部使用
- print(b)
'运行
在python中,使用open函数可以创建一个新文件或者打开一个已经存在的文件。
语法
open(文件路径,访问模式)
案例
- # 使用open函数创建一个新文件,文件路径为test.txt,访问模式为可写
- fp = open('test.txt','w')
- # 关闭这个文件
- fp.close()
-
- # 使用open函数打开一个已经存在的文件
- fp = open('test.txt','w')
- # 关闭这个文件
- fp.close()
'运行
文件路径
访问模式
写数据(write)
使用write()可以完成向文件中写入数据。
以只写方式写数据:
- # 手动创建一个demo文件夹(暂时不能通过代码创建)
- # 在demo文件夹中创建一个test.txt文件,访问模式为可写
- fp = open('demo/test.txt','w')
-
- # 向该文件写入5行hello world
- fp.write('hello world\n' * 5)
-
- # 关闭该文件
- fp.close()
-
- # 打开一个已经存在的文件
- fp = open('demo/test.txt','w')
-
- # 向该文件写入2行hello python
- fp.write('hello python\n' * 2)
-
- # 关闭该文件
- fp.close()
-
- # 此时该文件的内容是2行hello python,也就是说之前5行hello world的内容被覆盖了。
以追加方式写数据:
- # 在demo文件夹中创建一个test.txt文件,访问模式为追加
- fp = open('demo/test2.txt','a')
-
- fp.write('hello world\n' * 5)
-
- fp.close()
-
- # 打开一个已经存在的文件
- fp = open('demo/test2.txt','a')
-
- fp.write('hello python\n' * 2)
-
- fp.close()
- # 此时该文件的内容5行hello world加上2行hello python,也就是2行hello python的内容追加到文件的末尾。
得出结论:
类比(Linux命令):
读数据(read)
使用read(num)可以从文件中读取数据,num表示要从文件中读取数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
- # 打开一个已经创建的文件,访问模式为只读
- fp = open('demo/test.txt','r')
-
- # 读取5个字节的数据
- content = fp.read(5)
- print(content)
-
- # 分割线,用来测试
- print('-' * 12)
-
- # 从上次读取的位置继续读取剩下的数据
- content = fp.read()
- print(content)
-
- fp.close()
注意
读数据(readline)
readline只用来读取一行数据。
- fp = open('demo/test2.txt','r')
-
- content = fp.readline()
- print("第一行:%s" % content)
-
- content = fp.readline()
- print("第二行:%s" % content)
-
- fp.close()
读数据(readlines)
readlines可以按照行的方式把整个文件的内容进行一次性读取,并且返回的是一个列表,其中每一行为列表的一个元素。
- fp = open('demo/test2.txt','r')
-
- content = fp.readlines()
-
- # <class 'list'>
- print(type(content))
- print(content)
-
- print("-" * 30)
-
- for temp in content:
- print(temp)
-
- fp.close()
函数 | 作用 |
dumps | 传入一个对象参数,将对象转换为字符串 |
dump | 传入一个对象参数和一个文件参数,在对象转换为字符串的同时将其写入文件 |
- import json
-
- fp = open('names.txt','w')
-
- names_list = ['zhangsan','lisi']
-
- # TypeError: write() argument must be str, not list
- # 不能直接将列表写入文件
- # fp.write(names_list)
-
- # 调用json的dumps方法,传入一个对象参数,将对象转换为字符串
- result = json.dumps(names_list)
- fp.write(result)
- # <class 'str'>
- print(type(result))
-
- fp.close()
'运行
- import json
-
- fp = open('names.txt','w')
-
- names_list = ['zhangsan','lisi']
-
- # 调用json的dump方法,传入一个对象参数和一个文件参数,在对象转换为字符串的同时将其写入文件
- json.dump(names_list,fp)
-
- fp.close()
'运行
使用json实现反序列化
函数 | 作用 |
loads | 传入一个字符串参数,将字符串转换为对象 |
load | 传入一个文件参数,将文件中的内容转换为对象 |
- import json
-
- fp = open('names.txt','r')
-
- content = fp.read()
- # ["zhangsan", "lisi"]
- print(content)
- # <class 'str'>
- print(type(content))
-
- # 调用json的loads方法,传入一个字符串参数,将字符串转换为对象
- result = json.loads(content)
- # ['zhangsan', 'lisi']
- print(result)
- # <class 'list'>
- print(type(result))
-
- fp.close()
'运行
- import json
-
- fp = open('names.txt','r')
-
- # 调用json的load方法,传入一个文件参数,将文件中的内容转换为对象
- result = json.load(fp)
- # ['zhangsan', 'lisi']
- print(result)
- # <class 'list'>
- print(type(result))
-
- fp.close()
在读取一个文件时,如果这个文件不存在,则会报出FileNotFoundError异常
- fp = open('aaa.txt','r')
-
- # FileNotFoundError: [Errno 2] No such file or directory: 'aaa.txt'
- fp.read()
-
- fp.close()
语法
- try:
- 可能会出现异常的代码块
- except 异常的类型:
- 出现异常后的处理语句
案例
- try:
- fp = open('aaa.txt','r')
- fp.read()
- except FileNotFoundError:
- print("文件名称未找到,请检查文件名称是否正确")
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。