标准输入输出及 IO 操作

1. 多目标赋值

a,b,c,d,e = '我喜欢你啊'a, *b = '我喜欢你啊'>>> a = '我', b = '喜欢你啊'a = b = c = d = e = 1   # 全部赋值为 1 , 且地址不同a,b = b,a   # 交换值

2. 基本输入输出

print(value1, value2, ..., sep=' ', file=sys.stdout, end='\n')# sep 分隔符, 默认为空格# file 输出位置, 默认为控制台, 也可以重定向到文件# end 结尾添加内容, 默认换行input(string)# 以 string 作为提示符, 请求用户输入# 返回字符串, 常结合 exec, eval, int, float 等使用

3. 程序控制结构

if-elif-else 语句, 用于多分支选择, 这里的 “表达式” 可以是序列对象, 此时判断序列对象是否非空, else 和 elif 不是必要的

if 表达式1:    语句elif 表达式2:    语句elif 表达式3:    语句...else:    语句

for (i, j, ...) in iterable语句, 用于循环, 可以使用 countinebreak 进行语句控制

for i in iterable:    语句for i,j in iterable:    # 可以同时使用多个 “计数器”    语句

while 语句, 用于循环, 可以使用 countine (结束本次循环)和 break (结束此循环语句)进行语句控制, else 不是必要的

while 表达式:     语句else:    语句

try 语句, 用于捕捉异常, 从上到下, 若未被捕捉, 则进入 else, finally 是一定会执行的语句, 相当于告诉“我已经处理完所有的错误了”

try:    语句  # 一般只写一条语句except 异常类1:    语句except 异常类2:    语句else:    语句  # 未被上面捕捉时执行finally:    语句  # 一定会执行

4. 可执行对象解析命令

  • exec语句用来执行存储在代码对象、字符串、文件中的Python语句

  • eval 语句用来计算存储在代码对象或字符串中的有效的Python表达式

  • compile语句则提供了字节编码的预编译

eval(compile( 'print(3 + 6)', '', 'exec'))

注意事项:

  • eval函数只负责对表达式进行处理(对输入进行输出), 并没有赋值的功能, 本身是没有影响当前代码环境的能力. 若需要处理赋值表达式, 则需要使用exec

  • 网络安全性考量: 若用户输入

__import__('os').system('dir')

当前目录的文件夹都会展现在用户前面, 也可以使用 read, remove 等方法控制服务器

实际使用时, 可以对用户输入的语句进行检查; 也可以使用 ast 模块的 literal_eval 代替

import asteval = ast.literal_eval

5. IO 操作

(1) 打开文件

打开文件有两种方式, 一种是 open - close 语句, 一种是 with 上下文管理.

f = open('路径','打开模式')# TODO 执行的操作f.close()   # 如果没有 close, 文件将一直处于占用状态# f.closed  # 查看文件是否已经关闭
with open('路径','打开模式') as file:    # TODO 执行的操作

一般建议使用后者, 在文件读写结束后自动关闭文件. 这里的路径可以是相对路径也可以是绝对路径. 如果是绝对路径, 一般结合 os 模块使用.

(2) 打开模式

r   # (默认)只读模式, 文件不存在的时候报错, 不可写入(一般用此模式打开, 在python中创建数据副本)x   # 写入模式, 文件不存在的时候创建文件, 文件存在的时候报错w   # 写入模式, 文件不存在的时候创建文件, 文件存在的时候覆盖文件a   # 追加写入模式, 文件不存在的时候创建文件, 文件存在的时候在文件后写入新内容b   # 以二进制读取文件, 'bw','br'+   # 可读写模式, 'r+','w+', 追加属性, 不改变基本原则f.readable()        # 查看这个模式是否可读f.writeable()       # 查看这个模式是否可写# 其他参数 encoding = 'utf8' 编码类型

(3) 文件读取

f.read()            # 指针读取模式, 默认读取全文, 返回str, 一般使用此模式, 结合字符串 split 等方法使用f.read(n)           # 读取n个字节f.next()            # 指针跳转到下一个位置, 并返回内容f.readline()        # 指针按行读取f.readlines()       # 读取所有行, 并返回listf.seek(n)           # 指针位置重置为n(0为文件头)f.tell()            # 当前指针位置

(4) 写入数据

f.write('语句1\n语句2')                 # 写入缓存f.writelines(['语句1\n', '语句2'])      # 写入缓存, 多行数据用此语句f.flush()                              # 冲刷, 缓存区导入磁盘

(5) SIO 操作

SIO 指将文件动态内存管理, 速度极快, 但是存储数据量有限, 使用方法与 IO 操作类似:

import iosio = io.StringIO()sio.write()sio.read()sio.getvalue()sio.seek()sio.close()# 写入内存中, 速度快

标签

发表评论

Comment List(1)

  • TB

    2024.8.14 14:08

    hellow

    Reply