文件基础和常用模块

本文介绍了Python中文件的基础知识,包括文件的概念、种类、操作流程,详细讲解了文本和二进制文件的读写操作,以及如何指定编码类型。此外,还深入探讨了数据序列化的概念,特别是pickle和json模块的使用,以及随机数生成模块radmo的基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、⽂件的概念

  • l计算机的⽂件,就是存储在某种⻓期储存设备上的⼀段数据 ;

  • ⻓期存储设备包括:硬盘、U 盘、移动硬盘、光盘 ;

  • ⽂件的作⽤是可以将数据长期保存下来, 在需要的时候再使用。

二、⽂件的种类

1、⽂本⽂件

  • 可以使⽤⽂本编辑软件查看;

  • 例如:python 的源程序 ,txt 文本文件、doc、ppt、表格

2、 二进制⽂

  • 二进制文章是以01方式进行存储的

  • 保存的内容不是给⼈直接阅读的,⽽是提供给其他软件使⽤的

  • 例如:图⽚⽂件、⾳频⽂件、视频⽂件等等 ;

  • ⼆进制⽂件不能使⽤⽂本编辑软件查看。

三、⽂件操作流程

1. 操作⽂件的套路

⼀共包含三个步骤:

  • 第一步:打开⽂件 ;

  • 第二步:读、写⽂件 ;

    • 读: 将⽂件内容读⼊内存 ;

    • 写: 将内容写⼊⽂件 。

  • 第三步:关闭⽂件 。

2. ⽂件的函数/⽅法

在 Python 中要操作⽂件需要记住 1 个函数和 3 个方法

  • open 函数,打开文件

    • open 函数负责打开⽂件,并且返回⽂件对象

      • 如果⽂件存在------返回⽂件操作对象

      • 如果⽂件不存在------出错 ;

  • read / write / close 三个⽅法都需要通过 ⽂件对象 来调⽤

  • read ⽅法 —— 读取⽂件

  • open 函数的第⼀个参数是要打开的⽂件名(⽂件名区分⼤⼩写) ;

    • read ⽅法可以⼀次性读取文件的所有内容 。

    • close ⽅法负责关闭⽂件,如果忘记关闭⽂件,会造成系统资源消耗,⽽且会影响到后续对⽂件的访问 。

四、文件操作案例

1、读取文件

# 打 开文件
file = open(r"C:\file\temp\a.txt", "r")
# 读取文件
text = file.read() # 显示读取内容print(text)
# 关闭文件
file.close()

2、写入文件

# 打 开文件
file = open(r"C:\file\temp\b.txt", "w")
# 写入内容
str1 = "hello world\n"
file.write(str1)
str1 = "hello python\n"
file.write(str1)
# 关闭文 件
file.close()

3、文件打开方式

open 函数默认以只读⽅式打开⽂件,并且返回⽂件对象

  • “r”:只读方式打开文件;

  • “w”:只写方式打开文件;

  • “a”:追加写方式打开文件;

  • open 函数的访问方式后面添加 b 参数代表访问二进制文件,如:

  • rb: 代表用只读的方式打开一个二进制文件;

  • wb:代表用只写的方式打开一个二进制文件。

  • ab:代表用追加写的方式打开一个二进制文件。

4、指定编码类型

file = open(文件名, 打开方式, encoding="编码")

五、读取内容

1、readline

  • readline 方法可以一次读取一行内容。

  • ⽅法执⾏后,会把⽂件指针移动到下⼀⾏,准备再次读取

  • readline 方法读取到文件最后,返回长度为 0 的字符串””

案例:计算文件c.txt中一共有几行

file = open("d:/py1/c.txt","r",encoding="utf-8")
​
n = 0
while True:
    str = file.readline()
    if len(str) == 0:
        break
    n += 1
​
print(n)

2、readlines

  • readline 方法可以一次读取全部内容,返回一个列表,内容的每一行是列的一个元素

# 打开文件
file = open(r"C:\file\temp\a.txt")
# text 类型为list,list 中每个成员就是文件a.txt 的每一行
text = file.readlines()
# 遍历列表text
for n in text:
    # 显示text 每个成员内容
    print(n) # 关闭文件file.close()

六、open变种写法

# 原始方法
f = open("a.txt", "r") 
text = f.read() 
print(text)
f.close()
​
# 新写法  【不需要手动关闭文件,文件会自动关闭】
with open("a.txt", "r") as f: 
    text = f.read() 
    print(text)

七、作业

1.编写程序,创建一个文件名为 a.txt,文件中写入两行,内容如下:

2.编写程序,显示上个练习生成的 a.txt 文件内容。

八、数据序列化

1、概念

  • 序列化:将一个任意的数据类型转换成python能识别和处理的字符串

  • 逆序列化:将python能识别的字符串转换成对应的数据类型

  • 序列化的目的:将数据类型保存到磁盘上,也可以实现将数据发生给另外一个主机

数据类型

  • 字符串

  • 整数

  • 列表

  • 元组

  • 集合

  • 字典

实现序列化的方法

  • pickle

  • json

2、pickle模块

  • 序列化方法:pickle.dump()

  • 逆序列化方法:pickle.load()

pickle.dump实现序列化

pickle.dump(要保存的对象, 文件名)

案例:将字典实现保存到文件中

# 导入模块
import pickle
# 定义一个字典对象
nameList = {"tom":["hebei",18,"男"], "jerry":["tianjin",20,"女"]}
# 打开文件,打开方式 wb
file = open("d:/py1/c.pkl","wb")
# 用dump方法将字典写入到打开的文件中
pickle.dump(nameList, file)
# 关闭文件
file.close()

pickle.load实现逆序列化

pickle.load(文件名)

案例:从文件中读取字典类型保存的数据

import pickle
file = open("d:/py1/c.pkl","rb")
d1 = pickle.load(file)
file.close()
print(d1)

注意:可以多次执行序列化和逆序列化,但是不建议这么做

3、json模块

json的特点

  • JSON 是纯文本;

  • JSON 便于阅读和编写;

  • JSON 具有清晰的层级结构;

  • 有效地提升网络传输效率;

JSON 语法规则

  • 大括号保存对象;

  • 中括号保存数组;

  • 对象数组可以相互嵌套;

  • 数据采用键值对表示;

  • 多个数据由逗号分隔;

JSON 值

  • 数字(整数或浮点数);

  • 字符串(在双引号中);

  • 逻辑值(true 或 false);

  • 数组(在中括号中);

  • 对象(在大括号中);

示例

{
    "name": "tom", 
    "age": 18,
    "isMan": true,
    "school": null, 
    "address": {
        "country": "中国",
        "city": "河北",
        "street": "石家庄"
    },
    "numbers": [2, 6, 8, 9],
    "links": [
        {
            "name": "zaizhuo",
            "url": "http://www.zaizhuo.cn"
        },
        {
            "name": "载卓",
            "url": "http://www.zaizhuo.com"
        }
    ]
}

读取json文件

  • json.load(json文件名)

  • json.dump(data, f, ensure_ascii=False)

案例:读取json文件

# 导入模块
import json
# 打开文件
f = open('d:/py1/1.json', "r", encoding='UTF-8')
# 读取json文件
data = json.load(f)
# 返回的data 数据类型为字典或列表
print(data)
f.close()

案例:写入json格式数据

import json
data = {'name': 'tom', 'age': 20, 'country': '中国'} f = open('temp.json', 'w', encoding='UTF-8') json.dump(data, f, ensure_ascii=False)
# ensure_ascii=False 代表中文不转义
f.close()

模块1:radmo模块

  • 生成随机数字的

random() 方法

  • 作用:生成一个 0-1的随机数

import random
​
num1 = random.random()    # 生成一个随机数
print(num1)
num2 = random.random()    # 生成一个随机数
print(num2)
num3 = random.random()    # 生成一个随机数
print(num3)

randint(a,b)方法

  • 作用:生成指定范围的随机数,其中a是下限,b是上限【 >=a <=b】

import random
​
num1 = random.randint(1,10)    # 得到1-10之间的随机数
print(num1)
num2 = random.randint(10,20)    # 得到10-20之间的随机数
print(num2)
num3 = random.randint(10,10)    # 得到10-10之间的随机数
print(num3)

uniform(a,b)方法

  • 作用:生成指定范围的随机数,其中a是下限,b是上限【 >=a <=b】

  • 得到的数字都是浮点数

randrange(start,stop,setp)方法

  • 作用:获取指定的数字序列中的任意一个数

import random
​
num1 = random.randrange(3,100,3)
print(num1)
num1 = random.randrange(3,100,3)
print(num1)
num1 = random.randrange(3,100,3)
print(num1)

choice()方法

  • 作用:从给定的对象中随机抽取出来一个

import random
​
str = random.choice("abc q1")    # 将字符串中的随机挑一个复制给str
print(str)
​
str = random.choice(["123","qq","tom","hebei"])   # 将列表元素随机一个赋值给str
print(str)
​

作业1

1、生成一个随机数

2、生成一个0-100的随机数

3、生成一个任意的浮点数

4、生成一个由6个大写字母组成的随机数

模块2:sys模块

import sys
print(sys.argv)         # sys.argv 可以获取程序所在的路径
print(sys.version)      # sys.version 可以显示python的版本号
print(sys.path)         # sys.path 可以显示搜索模块的时候的搜索路径
sys.exit(9)   # 终止程序

模块3:time模块

  • sleep(N):让程序赞暂停n秒

import time
for i in range(10):
    print(i)
    time.sleep(2)
  • time() 可以获取当前的时间戳【当前时间距离计算机元年经过的秒,1970-1-1】

    • 注意,在数据库中都是存储时间戳

  • localtime() 返回元组,元组中是当前的时间日期信息

    • tm_year=2022,

    • tm_mon=3,

    • tm_mday=23,

    • tm_hour=11,

    • tm_min=21,

    • tm_sec=28,

    • tm_wday=2, 这是周2

    • tm_yday=82, 这是今年的第82天

    • tm_isdst=0

  • mktime() 将元组格式的时间,转换为时间戳

模块4:os模块

os.chdir(``"dirname"``)  改变当前脚本工作目录;相当于shell下cd
os.makedirs(``'dirname1/dirname2'``)    可生成多层递归目录
os.removedirs(``'dirname1'``)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(``'dirname'``)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(``'dirname'``)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(``'dirname'``)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename(``"oldname"``,``"newname"``)  重命名文件``/``目录
os.path.exists(path)  如果path存在,返回``True``;如果path不存在,返回``False
os.path.isfile(path)  如果path是一个存在的文件,返回``True``。否则返回``False
os.path.isdir(path)  如果path是一个存在的目录,则返回``True``。否则返回``False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值