当前位置: 首页 > news >正文

python笔记进阶--模块、文件及IO操作(1)

目录

一.模块

1.模块的导入和使用

1.1导入整个模块

1.2导入函数

1.3使用as给模块指定别名

2.常见标准库

2.1 import random:

2.2 import math:

2.3正则表达式处理

2.4turtle

二.文件及IO操作

1.文件

1.1绝对路径与相对路径

1.2读取文件

1.2.1打开文件模式

1.2.2写入文件

1.2.3with读取文件

2.CSV文件的读取


一.模块

1.模块的导入和使用

模块

将函数存储在称之为模块的独立文件中,再将模块导入到主程序中,

import语句:允许在当前运行的程序文件中使用模块中的代码。

包是Python模块的一种组织形式,将多个模块组合在一起,形成一个大的Python工具库。包通常是一个拥有__init__.py文件的目录,它定义了包的属性和方法。

1.1导入整个模块

模块

的使用

pizza.py

def make_pizza(size,*toppings):
    print(f"The {size} topping:")
    for topping in toppings:
        print(f"---{topping}")

making_pizza.py

import pizza  #导入模块pizza.py

pizza.make_pizza(16,'sugar')
pizza.make_pizza(43,'green','sugar')

The 16 topping:

---sugar

The 43 topping:

---green

---sugar

from pizza import make_pizza 

#导入模块pizza.py中的make_pizza函数

make_pizza(16,'sugar')
make_pizza(43,'green','sugar')

的使用

my_package包中

pizza.py

from my_package import pizza

pizza.make_pizza(16,'sugar')
pizza.make_pizza(43,'green','sugar')

1.2导入函数

①导入所有函数:from pizza import *

②导入特定函数

导入model_name.py中的function_name函数from model_name import function_name
导入model_name.py中的funtion_0, funtion_1, funtion_2函数

from model_name import funtion_0, funtion_1, funtion_2

making_pizza.py

导入pizza.py中的make_pizza的函数

from pizza import make_pizza

1.3使用as给模块指定别名

例如,给模块pizza指定别名p :import pizza as p

2.常见标准库

模块

用途

os

os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。

sys

sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。

time

time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。

datetime

datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。

random

random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。

math

math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。

re

re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。

json

json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。

urllib

urllib 模块提供了访问网页和处理 URL 的功能,包括下载文件、发送 POST 请求、处理 cookies 等。

2.1 import random

函数名

函数说明

randrange(start,stop,step)

start 指定范围的起始值 包含本身,默认是0;stop 指定范围的结束值不包含本身; step 步长,默认步长是1。该函数返回一个整数

randint(start,end)

返回[start end]之间的一个随机整数,start必须小于end

random()

返回一个[0.0,1.0)之间的随机小数

choice(seq)

返回一个序列(列表、元组,字符串)中返回一个随机元素

shuffle(seq)

将序列元素随机排列(打乱顺序)

2.2 import math

函数名

函数的说明

示例

math.ceil()

向上取整

math.ceil(18.1)   #19

math.floor()

向下取整

math.floor(18.1)  #18

math.sqrt

求平方根

math.sqrt(100)

2.3正则表达式处理

可以用于文本搜索、替换、分割等

模式

描述

\w

匹配字母数字及下划线

\W

匹配非字母数字下划线

\s

匹配任意空白字符,等价于\rinf].

\S

匹配任意非空字符

\d

匹配任意数字,等价于[0-9]

\D

匹配任意非数字

\A

匹配字符串开始

\Z

匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串

\z

匹配字符串结束

\G

匹配最后匹配完成的位置

\N

匹配一个换行符

\t

匹配一个制表符

A

匹配字符串的开头匹配字符串的末尾。

.

匹配任意字符,除换行符,当re.DOTALL标记被指定时,则可匹配包括换行符的任意字符。

[...]

用来表示一组字符,单独列出:[amk]匹配 "a','m"或"k"

[^...]

不在[]中的字符:[^abc]匹配除a,b,c之外的字符。

*

匹配0个或多个的表达式。

+

匹配1个或多个的表达式。

?

匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

{n}

精确匹配n个前面表达式。

{n,m}

匹配n到m次由前面的正则表达式定义的片段,贪婪方式

a|b

匹配a或b

()

匹配括号内的表达式,也表示一个组

2.4turtle

方法

说明

forward(d)/fd(d)

向当前画笔方向移动d像素长度

backward(d)/back(d)/bk(d)

向当前画笔相反方向移动d像素长度

goto(x,y)/setpos(x,y)/setposition(x,y)

将画笔移动到坐标为x,y的位置

setx(x)

设置海龟的横坐标为 x,纵坐标保持不变

sety(y)

设置海龟的纵坐标为 y,横坐标保持不变

penup()/up()

提起笔移动,不绘制图形,用于另起一个地方绘制

pendown()/down()

放下笔,移动时绘制图形,缺省时也为绘制

right(degree)/rt(degree)

顺时针移动degree°

left(degree)/lt(degree)

逆时针移动degree°

setheading(angle)/seth(angle)

设置海龟的朝向为 angle

circle(radius, extent=None, steps=None)

绘制圆弧

dot(radius,colorstr)

绘制一个指定直径和颜色的圆点

home()

设置当前画笔位置为原点,朝向东

二.文件及IO操作

1.文件

文件以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。

计算机文件基本上分为二种:二进制文件(没有统一的字符编码)

纯文本文件(有统一的编码,可以被看做存储在磁盘上的长字符串)

纯文本文件编码格式ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。

二进制文件与文本文件的一个最主要的区别在于是否有统一的字符编码格式,二进制文件顾名思义是直接由0与1组成,无统一的字符编码。如图片文件(jpg、png),视频文件(avi)等。

1.1绝对路径与相对路径

相对路径

当前工作目录来确定文件或者文件夹位置

f = open('test.txt',mode='w',encoding='utf-8')

退到上一级目录f = open('../test.txt')

绝对路径

从根目录开始到文件\文件夹为止的完整路径

path = os.getcwd() #目前文件位置

filename = path + '/test.txt'

f = open(filename,mode='r',encoding='utf-8')

1.2读取文件

打开文件

详见1.1绝对路径与相对路径

读取文件内容

读取5个字符

context = f.read(5)

读取一行

context = f.readline()

打印全部

context = f.readlines()

关闭文件

f.close()

1.2.1打开文件模式

mode

解释

r

只读【默认模式,文件必须存在,不存在则抛出异常】

w

只写,写之前会清空文件的内容,如果文件不存在,会创建新文件

a

追加,在原本内容中继续写,如果文件不存在,则会创建新文件

r+

可读可写

w+

打开一个文件用于读写。如果该文件已有则将其覆盖。如果该文件不存在,创建新文件。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

b

rb、wb、ab、rb+、wb+、ab+意义和上面一样,用于二进制文件操作

1.2.2写入文件

代码

结果

写入一行

f.write('你好,我是mia\n')

f.write('你是谁\n')

你好,我是mia

你是谁

写入若干行

f.writelines(['你好,我是mia\n',  '你是谁\n'])

a=['你好,我是mia\n',  '你是谁\n']
f.writelines(a)

context = ['你好,我是mia','你是谁']
for i in context:
    f.write(i+'\n')

输入写入

date = input('请输入今天的日期:')

f.write(date+'\n')

1.2.3with读取文件

with open('test.txt', mode='r', encoding='utf-8') as f:
    context = f.read()

2.CSV文件的读取

读取文件

with open('data.csv',mode='r',encoding='utf-8') as f:
    cf = csv.reader(f)  #将csv拆分成一个个列表

['姓名','科目','成绩']
['张蘑菇','python','99']
['王蘑菇','Java','88']

head = next(cf)  #获取表头
    scores = []
    for i in cf:
        print(i)

['张蘑菇','python','99']
['王蘑菇','Java','88']

写入

with open('data.csv',mode='w',encoding='utf-8') as f:
    cf = csv.writer(f)
    cf.writerow(['tom','c','77'])

lista = [['Bob','C++','79'],['Job','MySQL','89']]

cf.writerow(lista)

随机生成信息

from my_package import my_tools
lista = []
def random_info(n=100):
    subjects = ['python','java','C++','html']
    names = []
    for i in range(n//len(subjects)):
        name = my_tools.random_string(random.randint(3, 6))
        names.append(name)
    for i in range(n):
        subject = random.choice(subjects)
        score = random.randint(50,100)
        name = random.choice(names)
        for j in lista:
            if j[0]==name and j[1]==subject:
                break
        else:
            lista.append([name,subject,score])

相关文章:

  • 大数据篇 一篇讲明白 Hadoop 生态的三大部件
  • QT作业day2
  • GRE VPN——配置实验
  • 实验3 中文分词
  • 16:00面试,16:06就出来了,问的问题有点变态。。。
  • npm淘宝镜像源切换
  • Redis常见命令
  • 谭浩强第五版C语言课后习题(编程题)+答案
  • 优橙内推广西专场——5G网络优化(中高级)工程师
  • 【ML】类神经网络训练不起来怎么办 5
  • C语言:指针进阶
  • MySQL数据库高阶语句②
  • Golang案例开发之gopacket抓包三次握手四次分手(3)
  • C语言UNIX域套接字CS模型
  • 全局UI方法-弹窗六-自定义弹窗
  • (三)从jvm层面了解线程的启动和停止
  • [译]Python中的类属性与实例属性的区别
  • 「面试题」如何实现一个圣杯布局?
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 2017 年终总结 —— 在路上
  • AngularJS指令开发(1)——参数详解
  • Apache的80端口被占用以及访问时报错403
  • CSS 专业技巧
  • CSS实用技巧
  • export和import的用法总结
  • Java程序员幽默爆笑锦集
  • laravel5.5 视图共享数据
  • Otto开发初探——微服务依赖管理新利器
  • Puppeteer:浏览器控制器
  • Python学习之路13-记分
  • Redux 中间件分析
  • vue总结
  • 将 Measurements 和 Units 应用到物理学
  • 前端_面试
  • 前端js -- this指向总结。
  • 前端面试总结(at, md)
  • 使用common-codec进行md5加密
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • !$boo在php中什么意思,php前戏
  • #laravel 通过手动安装依赖PHPExcel#
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • ${factoryList }后面有空格不影响
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十三)Maven插件解析运行机制
  • (数据结构)顺序表的定义
  • (转)visual stdio 书签功能介绍
  • (转)菜鸟学数据库(三)——存储过程
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core使用ef 6
  • .net mvc actionresult 返回字符串_.NET架构师知识普及