一、数据类型转换
-
int
(整型) 与str
(字符串) 之间:-
str
转int
:int("123")
(要求字符串内容必须是数字)。 -
int
转str
:str(123)
。 -
规则: 使用目标类型的英文名加括号包裹原数据即可。
-
-
list
(列表) 与tuple
(元组) 之间:-
list
转tuple
:tuple([1, 2, 3])
。 -
tuple
转list
:list((1, 2, 3))
。
-
-
list
与str
之间:-
str
转list
:list("abc")
→['a', 'b', 'c']
(意义不大)。 -
list
转str
:str([1, 2, 3])
→'[1, 2, 3]'
(意义不大)。
-
-
list
或tuple
与dict
(字典) 之间:-
非直接转换。需提供依据(如键或值)。
-
字典转列表(仅获取键):
list(my_dict.keys())
。 -
字典转列表(仅获取值):
list(my_dict.values())
。
-
-
其他类型转换为
bool
(布尔值):-
记住以下值转换为
False
:0
(数字零),""
(空字符串),{}
(空字典),[]
(空列表),()
(空元组),None
。 -
其他所有值均转换为
True
。 -
在
if
条件语句中,可以直接跟一个值,Python会自动将其转换为布尔值判断真假。
-
二、None
类型
-
含义: 代表空数据或空值,等价于其他语言中的
null
。 -
作用: 在变量初始值为空时,使用
None
避免不必要的内存开辟。例如,v1 = None
比v1 = ""
或v1 = 0
更高效,因为它指向一个固定的空地址,不会额外创建空对象。 -
布尔转换:
None
转换为布尔值时为False
。
三、编码与字节
-
历史演进:
-
ASCII: 早期编码,1字节(8位),256个字符,主要包含英文、数字、符号。
-
GB2312/GBK: 中国等亚洲国家为支持中文等文字开发的编码,通常2字节。
-
Unicode (万国码): 包含全球所有文字的字符集,支持最长4字节表示。
-
-
存储与传输问题:
-
Python内部字符串基于Unicode(通常每个字符占4字节)。
-
Unicode虽全面,但占空间大,不适合网络传输和文件存储(浪费流量和存储)。
-
-
UTF-8:
-
对Unicode进行压缩处理,变长编码(1-4字节)。
-
ASCII字符占1字节,中文字符通常占3字节。
-
常用场景: 网络传输和文件存储。
-
-
字符串 (
str
) 与字节 (bytes
) 转换:-
encode()
: 将字符串(Unicode)转换为字节(如UTF-8编码)。-
my_str.encode('utf-8')
→ 得到bytes
类型数据(用于写入文件或网络传输)。
-
-
decode()
: 将字节(如UTF-8编码)转换回字符串(Unicode)。-
my_bytes.decode('utf-8')
→ 得到str
类型数据(用于读取文件或网络接收数据后的处理)。
-
-
四、文件操作
-
基本三步:
-
打开文件:
open(file_path, mode)
-
操作文件: 读取 (
read()
) 或 写入 (write()
) -
关闭文件:
f.close()
(重要,释放资源,确保数据写入硬盘)
-
-
文件路径:
-
相对路径: 相对于当前Python脚本的运行目录(如
'db.txt'
)。 -
绝对路径: 文件的完整路径(如
'D:\\my_project\\db.txt'
),Windows路径前加r
避免转义符问题。
-
-
打开模式 (
mode
):-
'w'
(write): 写入模式。如果文件不存在则创建;如果文件存在,会先清空所有内容,再写入新内容。 -
'a'
(append): 追加模式。如果文件不存在则创建;如果文件存在,保留原有内容,并在文件末尾追加新内容。 -
'r'
(read): 读取模式。文件必须存在,否则报错。 -
'b'
(binary): 二进制模式(配合w/a/r
使用,如'wb'
,'ab'
,'rb'
)。用于处理非文本数据(如图片、视频)或经过编码的文本字节流。-
'wb'
/'ab'
:写入时必须传入bytes
类型数据。 -
'rb'
:读取时得到bytes
类型数据。
-
-
-
写入文件:
-
文本写入:
f.write(my_string.encode('utf-8'))
(文本需先编码为字节)。 -
换行符:
\n
。 -
f.flush()
: 强制将内存中的数据立即写入硬盘,确保数据不丢失(在频繁写入但不需要立即关闭文件时有用)。 -
优化: 尽可能在程序开始时打开文件,多次写入后在程序结束时关闭,减少频繁打开关闭的性能开销。
-
-
读取文件:
-
f.read()
:读取文件所有内容,返回bytes
类型数据。 -
关键步骤:
my_bytes.decode('utf-8')
将读取到的字节数据解码为字符串,方便后续处理。 -
字符串处理:
-
my_str.strip()
:移除字符串两端的空白字符(包括空格、制表符、换行符\n
)。 -
my_str.split('\n')
:根据换行符将字符串切割成列表,每项代表一行。 -
line.split(',')
:根据逗号切割单行数据。
-
-
五、实践案例
-
用户注册存储到文件:
-
获取用户名、密码、邮箱。
-
将它们格式化为一行字符串(如
"用户名,密码,邮箱\n"
)。 -
将该行字符串编码为UTF-8字节。
-
使用
'ab'
模式打开文件,写入字节数据。 -
使用
f.flush()
确保每条注册信息及时写入硬盘。
-
-
下载网络数据并处理:
-
使用
requests.get(url)
获取网络响应。 -
res.content
:获取原始响应内容(通常是字节类型,如UTF-8编码的文本或图片二进制数据)。 -
如果内容是文本:
res.content.decode('utf-8')
还原为字符串,再进行替换、解析等操作。处理后的字符串再encode('utf-8')
写入文件。 -
如果内容是图片:直接将
res.content
写入以'wb'
模式打开的文件。
-
-
读取文件信息并构建数据结构:
-
使用
'rb'
模式打开文件。 -
f.read().decode('utf-8').strip()
:读取并解码为字符串,去除两端多余的换行。 -
my_str.split('\n')
:按行分割得到列表。 -
遍历列表中的每一行,
line.split(',')
按逗号分割,获取所需数据(如股票代码和名称)。 -
将获取到的数据构建成目标字典格式。
-
-
下载图片:
-
获取图片URL。
-
requests.get(image_url).content
获取图片二进制数据。 -
使用
'wb'
模式打开本地文件路径(文件名可从图片数据中提取)。 -
将图片二进制数据写入文件。
-
注意事项
- 编码陷阱:处理非 UTF-8 编码文件时需指定正确编码(如
gbk
),避免乱码。 - 资源管理:使用
with open()
语法自动关闭文件,替代手动close()
,防止资源泄漏。 - 性能优化:批量写入替代频繁单次写入,减少
open/close
开销。