python学习day10

python基础语法day10

一、二分法

二分法叫二分查找;

作用:从某个有序容器中一半一半的取元素,最终获取到目标值

限制: 所查找容器必须事先排好序

list1 = [0, 5, 10, 60, 90]
# list1 = [70]
target = 70
left = 0
right = len(list1) - 1
while left <= right:
    mid = (left + right) // 2
    if list1[mid] == target:
        print(mid)
        break
    elif list1[mid] > target:
        right = mid - 1
    else:
        left = mid + 1
else:
    print('未找到')
  • 时间复杂度:程序执行时花费时间
  • 空间复杂度:程序执行时花费的内存
  • 时间复杂度和空间复杂度是保持平衡的。

二分法的变形:容器元素先升序再降序

二、数据持久化

  1. 数据持久化:将数据从瞬时状态转换为持久状态

对象:文本文件和表格文件

  1. python操作文件

操作文本文件:新建(重命名) -> 打开 -> 写数据 ->保存关闭

打开 -> 读数据 -> 关闭

表格文件(excel):新建 -> 打开 -> 写数据 -> 保存、关闭、重命名

打开 -> 读数据 -> 关闭

  1. 文件操作形式

以读写形式操作文件

  • r:只读,文件不存在,报错
  • w:只写,文件不存在,先创建;如果文件存在,先清空
  • a:追加,文件不存在,先创建;文件存在,继续添加内容

以字符串、二进制数据类型操作文件

  • t:字符串形式(如果选t,可以不写,r等价于rt、tr)
  • b:二进制形式,一般计算机中存储的数据都是以二进制形式存在(图片、视频、音频等)
  1. 文件操作形式应该怎么使用

‘rt’,‘rb’,‘tr’,'br’等

三、文件读操作

open(文件路径,文件操作模式,编码方式,换行方式)

文件路径:包含文件名,一般写相对路径

文件操作模式:‘rt’,‘rb’,‘tr’,'br’等

编码方式:encoding = ‘utf-8’,或encoding = ‘gbk’

换行方式:newline = ‘’(读操作不需要指定)

  • windows:\r\n;mac:\r;linux:\n;
  • 补充:\r将鼠标光标移动到下一行行首。
  1. 文件路径
    绝对路径:一个文件存放在那个磁盘下的什么文件夹(D:\user\word\test.txt)

相对路径:以当前文件为参照物,另一个文件相对于他的位置

.表示当前目录

…表示返回上一级

\文件夹和文件夹之间以及文件夹和文件之间间隔的符号

  1. 以文件对象的形式打开已存在文件
# file = open(r'test.txt', 'r', encoding='utf-8')
file = open(r'test.txt', 'r', encoding='gbk')
print(file)
  1. 读操作:read、readline、readlines
  • read:一次性将文件中内容以字符串的形式全部读

    result = file.read()
    print(result,type(result))
    
  • readline:每次只读一行,结果为字符串类型

    result1 = file.readline()
    result2 = file.readline()
    result3 = file.readline()
    result4 = file.readline()
    print(result1, result2, result3, result4)
    
  • readlines:一次性将所有行读出来,结果为列表,每一行是列表中的每个元素

    result5 = file.readlines()
    print(result5)
    
  1. 关闭文件
file.close()

四、文件写操作

open(文件路径,文件操作模式,编码方式,换行方式)

文件路径:包含文件名,一般写相对路径

文件操作模式:‘rt’,‘rb’,‘tr’,'br’等

编码方式:encoding = ‘utf-8’,或encoding = ‘gbk’

换行方式:newline = ‘’(读操作不需要指定)

file = open('古诗.txt', 'w', encoding='utf-8', newline='')
  1. 写操作:write
str1 = '静夜思\n唐 李白\n床前明月光\n疑是地上霜\n'
file.write(str1)
file.close()
file = open('古诗.txt', 'a', encoding='utf-8', newline='')
# write:向文件写入内容
str1 = '举头望明月\n低头思故乡'
file.write(str1)
file.close()
  1. 读操作和写操作编码要保持一致
file = open('古诗.txt', 'r', encoding='utf-8')
# file = open('古诗.txt', 'r', encoding='gbk')
print(file.read())
file.close()
# file.read() # ValueError: I/O operation on closed file.
# I/O --> Input/Out

五、with用法

  1. with:预定义的清理操作

  2. 只要退出了with的缩进,直接执行清理操作,将文件关掉。

with open('古诗.txt', 'r', encoding='utf-8') as file:
    result = file.read()
    print(result)

# print(file.read())

六、eval方法

eval:将字符串序列化,eval中必须写长度非0的字符串

with open('eval测试.txt', 'w', encoding='utf-8') as file:
    file.write('1\n')
    list1 = [1, 2, 3, 4, 5]
    file.write(f'{list1}')

with open('eval测试.txt', 'r', encoding='utf-8') as file:
    result1 = file.readline()
    print(result1, type(result1))
    print(file.readline())

print(eval('1') + 2)
print('[1,2,3,4,5]'[0])
print(eval('[1,2,3,4,5]')[0])
# print(eval('abcd'))
# print(eval(''))

七、python读写图片、视频

  1. 将图片二进制读出来
file = open('photo1.jpg', 'rb')
result = file.read()
file.close()
# b'xxxxxx' 二进制字节码
  1. 将图片二进制数据写回去
file = open('photo2.jpg', 'wb')
file.write(result)
file.close()

八、csv文件

  1. csv.writer(打开的文件)
  • CSV文件中的数据是以表格形式展示,但是其中的原理是文本文件的原理。
  • 列表中的一个元素代表一个单元格的内容

2.csv.writers(打开的文件)

  • writerow() - 单行写入,writerow中传递一个列表,列表表示一行,
  • 列表中的一个元素代表一个单元格的内容
import csv
csvfile = open('学生成绩.csv', 'w', encoding='utf-8', newline='')
# 使用CSV模块提供的writer方法进行文件写操作
myWrite = csv.writer(csvfile)
myWrite.writerow(['编号', '姓名', '年龄', '专业'])

# writerow() - 单行写入,writerow中传递一个列表,列表表示一行,
# 列表中的一个元素代表一个单元格的内容
myWrite.writerows(
    [
        ['python001', '张三', '18', '计算机科学与技术'],
        ['python001', '张三', '18', '计算机科学与技术'],
        ['python001', '张三', '18', '计算机科学与技术']
    ]
)
csvfile.close()
file = open('学生成绩.csv','r',encoding='utf-8')
data = csv.reader(file)
for i in data:
    print(i)
file.close()

九、csv表格添加一列计算的平均分

import csv
# 读酒店文件
file = open('北京高档酒店价格分析.csv', 'r', encoding='utf-8')
# 可迭代对象
data = csv.reader(file)

dataList = [i for i in data]
# for i in data:
#     print(i)
file.close()

# 计算结果并写回文件
file_1 = open('北京高档酒店价格分析.csv', 'w', encoding='utf-8', newline='')

myWrite = csv.writer(file_1)
# # for i in range(1,len(dataList)):
dataList[0].append('平均评分')
myWrite.writerow(dataList[0])

for i in dataList[1:]:
    sumScroe = 0
    for index in range(3, 7):
        # 计算总分
        sumScroe += float(i[index])
    AvgScroe = round(sumScroe / 4, 1)
    print(i[0], AvgScroe)
    # -----
    i.append(AvgScroe)
    myWrite.writerow(i)

file_1.close()
print('写入完成')

十、csv写读操作

  • writeheader():将fieldnames对应的参数以列名的形式写入表格
  • writerow():单行写入,以字典的形式单行写入
  • writerows():多行写入,以列表的形式写入,列表中的元素为字典,一个字典代表一行
  • csv.DictReader()结果为可迭代器对象
import csv
with open('王者荣耀装备.csv', 'w', encoding='utf-8', newline='') as f:
    myWriter = csv.DictWriter(f, fieldnames=['类型', '名称', '价格'])
    # writeheader():将fieldnames对应的参数以列名的形式写入表格
    myWriter.writeheader()
    # writerow():单行写入,以字典的形式单行写入
    myWriter.writerow({'类型': '法师', '名称': '吸血书', '价格': 1880})
    # writerows():多行写入,以列表的形式写入,列表中的元素为字典,一个字典代表一行
    myWriter.writerows(
        [
            {'类型': '打野', '名称': '打野刀', '价格': 250},
            {'类型': '游走', '名称': '学识之石', '价格': 250},
            {'类型': '移动', '名称': '冷静之靴', '价格': 770}
        ]
    )
print('写入完成')

# CSV读方法
with open('王者荣耀装备.csv', 'r', encoding='utf-8') as f:
    # csv.DictReader()结果为可迭代器对象
    result = csv.DictReader(f)
    for i in result:
        print(i, type(i))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值