文件操作;模块

文件操作

常见的文件类型

txt

cvs

json

html

mp4

文件操作的流程

打开

open()

读/写

read()/write()

关闭

close()

序号用途方法功能
打开/关闭文件f=open(file)打开文件
f.close()关闭文件
读写文件内容f.read([size])从文件中读取指定的字节数;若未指定,读取所有
f.readline([size])读取整行(第一行),包括“\n”
f.readlines([size])读取所有行,并返回列表
f.write(str)将字符串写入文件,并返回字符串长度
f.writelines(seq)向文件写入一个序列字符串列表,如果需要换行,需自己加入换行符
f.flush()刷新文件缓冲,直接把内容缓冲的数据写入文件
文件定位f.seek(offset)设置文件的当前位置,即指针位置
f.tell()返回文件的当前位置,即指针位置

文件的打开与关闭

内置函数:open(),创建一个file对象,之后才可以用它调用相关的方法。

格式:file_object = open(file,[mode],[encoding=“utf-8”],[buffering])

解释:

file_object open()返回的文件对象

file 要打开的文件

mode 指定模式:只读,写入,追加等等。一般默认只读

encoding 指定文件编码,usually,“utf-8”/“GBK”

buffering 若设置为0,不会有寄存;设为1,访问文件时会寄存行;设为大于1的数,表明是寄存区的缓冲大小;设为负数,则寄存区的缓存区大小为系统默认

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件对象的属性

属性描述
f.name返回文件的名称
f.mode返回打开文件的访问模式
f.closed如果文件已关闭,返回true;否则返回false

文件的读写

f.read([size])

从文件当前指针处读取

传递size,读取指定的字节数

f = open('./data/GreenFlowerPorcelain.txt','r')
print(f.read(4))
print(f.read(4))

1 G
reen

with open('/path/to/file', 'r') as f:
    print(f.read())

定位读取

f.tell()

获取文件的当前位置

f.seek()

​ f.seek(offset,[from])

​ offset,要移动的字节数

    from,指定偏移的参考位置

模块(module)

目的:为了编写方便维护的代码,可以把不同功能的代码分组,保留在不同的文件。

在python中,一个.py文件可以称为一个模块。

即:包含相应功能的函数以及变量,.py则以“.py”为后缀名;模块可以为其他的程序引用,以使用该模块所对应的的函数或者变量

使用模块的优点:

1.提高代码可维护性

2.提高代码复用性

3.可以导入很多功能的模块

​ 标准库模块

​ 第三方模块

​ 自定义模块

4.避免变量名重复(作用域)

导入模块的常用方式

import calendar
print(calendar.__file__)

可寻找模块的路劲

import 模块名称

import 模块名称**

import 模块名称 as 新名称

from 模块名称 import 函数名

区别

import 模块名称 和 import 模块名称 as 新名称

  1. 会导入这个模块
  2. 如果我们需要使用某个函数,必须以“模块名称.函数名()”的形式来调用相应的函数(这种方式更有利于程序 的可读性(优先推荐))
  3. import 模块名称 as 新名称,重新命名导入的模块,通常使模块名称简洁,方便使用

from 模块名 import 函数名(不推荐使用)

  1. 只导入某一个函数,而不是整个模块
  2. 可以直接函数名称去调用函数,而无需在函数名称前加模块名称
  3. 如果我们的程序语句很多,不建议采用该方式(原因:调用很多模块后,可能造成函数名重名,引发报错)

注意:import 语句的对应模块顺序

python标准模块–>第三方模块–>自定义模块

os模块

是python标准库中用于访问操作系统功能的模块

使用os模块提供的接口,能实现跨平台访问

最常见的操作

目录的操作

判断

1.系统操作

os.sep: 用于查看系统路径的分隔符;

​ Windows系统—> ‘\’

**os.name: ** 显示我们正在使用的平台

​ Windows系统—>‘nt’

os.getenv(): 读取环境变量

os.getcwd: 获取当前路径

2.目录操作

**os.listdir()?*返回指定目录下的所有文件和目录名,不给定则返回当前路径

目录创建

**os.mkdir(path)?*创建一级目录

**os.makedirs(path)?*创建多级目录,创建多级目录

import os
os.makedirs('main_file/sub_file')

建立main_file文件和子文件sub_file

3.目录/文件删除

**os.rmdir(path)?*删除空目录(一级)

**os.removedirs(path)?*删除空目录(多级)

**os.remove(path)?*删除文件,必须是文件

4.更改路径/更改文件名称

**chdir(path)?*change direction #将当前工作目录更改到指定的工作目录

os.rename(old_name,new_name)#只能到目录更改文件名

5.判断文件

**os.path.exists(path):**判断文件或目录是否存在,存在,true;否则false

**os.path.isdir(path)?*判断是否为目录

**os.path.isfile(path)?*判断是否为文件

6.拓展

**os.path.dirname(path)?*返回文件路径

**os.path.basename(path)?*返回文件名称

**os.path.getsize(name)?*返回文件大小

**os.path.abspath(name)?*返回文件绝对路径

**os.path.join(path,name)?*连接目录与文件名或者目录

​ 注意:会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃

​ 在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接。

**os.path.split(path)?*将path的目录和文件名隔开,并返回元组

7.查看文件时间

os.path.getmtime(path): 返回文件或者目录的最后修改时间,结果为秒数—>modify

os.path.getatime(path):返回文件或者目录的最后访问时间,结果为秒数

os.path.getctime(path):返回文件或者目录的最后访问时间,结果为秒数

8.time模块

import time

time.sleep(n) #休眠n秒

time.time()#获取当前时间戳

python中,表示时间通常有三种方式:

1.时间戳(timetamp):表示的是从1970.01.01 00:00:00开始按秒计算的偏移量

2.格式化的时间字符串(format string)

python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

3.结构化的时间(struct_time)----元组,9个元素,(年月日时分秒,一年的第几周,一年的第几天,夏令时)

time模块的常用方法

-时间戳----计算机识别的

-字符串时间—人类可以看的

-结构化时间—对时间的操作

方法描述
time.localtime([sec])将一个时间戳转化为一个当前时区的struct_time(若未提供参数,当前时间)
time.gmtime([sec])和localtime()类似,不同的是将一个时间戳转换为UTC时区(0时区)的struct_time
time.time()返回当前时间戳
time.mktime(t)将time.struct_time转化为时间戳
time.sleep(sec)线程推迟指定的时间运行
time.asctime([t])把表时间的元组或struct_time表示为:‘Sun July 26 09:06:12 2019’ ;若未传参数,默认为time.localtime()
time.ctime([t])把一个时间戳转化为time.asctime()的形式。若未传参数,默认time.time()
time.strftime(format[t])把一个代表时间的元组/struct_time (localtime()和gmtime()转化为格式化的字符串;如未传参数,默认为time.localtime()
time.strptime()将结构化字符串转化为struct_time形式

结构化时间和时间戳的转换

import time
tp_struct=time.localtime()
print(time.strftime('%Y %m %d %X',tp_struct))

输出:
2019 07 26 09:39:19

字符串时间到结构化时间的转化

time.strptime(时间字符串,字符串对应格式)

import time
print(time.strptime('2019-07-26','%Y-%m-%d'))

输出:
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)
import time
tp_struct=time.localtime()
print(time.asctime(tp_struct))

time.asctime(结构化时间)

import time
tp_struct=time.localtime()
print(time.asctime(tp_struct))

输出:Fri Jul 26 09:50:09 2019

时间戳和字符串的转化(国际化)

9.datetime模块

相比time来说,datetime模块接口更直观,更容易调用

方法(类)描述
datetime.date表示日期(类),常用属性year,month,day
datetime.time表示时间(类),常用属性hour,mintue,second,microsecond
datetime.datetime表示日期
datetime.timedelta表示时间间隔
datetime.tzinfo与时区有关的信息
import datetime
print(datetime.datetime.now())
输出:
import datetime
print(datetime.datetime.now())
10.sys模块

sys模块是与python解释器交互的一个接口

-处理命令行参数

-在解释器启动后,argv列表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称

11.序列化模块

概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程

str/bytes—>数据结构(反序列化) 数据结构—>str/bytes(序列化)

为什么要使用序列化?

-持久化数据类型

-跨平台交互使用

-使程序更易维护

json

json格式在各个语言中都可以通用序列化格式。在json中,所有的字符串必须为’’

json类型python类型
{}dict
[]list
‘string’str
1234.56int/float
true/falseTrue/False
nullNone

json的方法和属性

四个功能

-dumps 序列化,转换为字符串

-dump

-loads

-load

如果是元组,序列化强转为字典;如元组作为字典的键,序列化是报错

如果把数据类型直接序列化写入文件中,可以用dump和load方法

import json
dic={'name':'tom','age':18}
with open('dump_json','w') as f:
    json.dump(dic,f)   #dump方法可以接收一个文件句柄。直接将字典->字符串,写入文件中

pickle

只适用于python

内部中结构化的数据<—>格式pickle<—>bytes类型<—>保存在文件中或基于网络传输

优缺点:

​ 优点:

​ -支持python中几乎所有的类型

​ -pickle会把数据类型序列化为bytes类型

​ 缺点:

​ -只支持python

模块提供四个功能:

-序列化

​ -dumps

​ -dump

-反序列化

​ -loads()

​ -load()

import pickle
dic={'name':'tom','age':12}
dic_b=pickle.dumps(dic)
print(type(dic_b))
dic_d=pickle.loads(dic_b)
print(type(dic_d))
输出:
<class 'bytes'>
<class 'dict'>

time模块

import time

time.sleep(n) #休眠n秒

time.time()#获取当前时间戳

python中,表示时间通常有三种方式:

1.时间戳(timetamp):表示的是从1970.01.01 00:00:00开始按秒计算的偏移量

2.格式化的时间字符串(format string)

python中时间日期格式化符号:

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

3.结构化的时间(struct_time)----元组,9个元素,(年月日时分秒,一年的第几周,一年的第几天,夏令时)

time模块的常用方法

-时间戳----计算机识别的

-字符串时间—人类可以看的

-结构化时间—对时间的操作

         方法           	                   描述                   

time.localtime([sec]) 将一个时间戳转化为一个当前时区的struct_time(若未提供参数,当前时间)
time.gmtime([sec]) 和localtime()类似,不同的是将一个时间戳转换为UTC时区(0时区)的struct_time
time.time() 返回当前时间戳
time.mktime(t) 将time.struct_time转化为时间戳
time.sleep(sec) 线程推迟指定的时间运行
time.asctime([t]) 把表时间的元组或struct_time表示为:‘Sun July 26 09:06:12 2019’ ;若未传参数,默认为time.localtime()
time.ctime([t]) 把一个时间戳转化为time.asctime()的形式。若未传参数,默认time.time()
time.strftime(format[t]) 把一个代表时间的元组/struct_time (localtime()和gmtime()转化为格式化的字符串;如未传参数,默认为time.localtime()
time.strptime() 将结构化字符串转化为struct_time形式

结构化时间和时间戳的转换

import time
tp_struct=time.localtime()
print(time.strftime('%Y %m %d %X',tp_struct))

输出:
2019 07 26 09:39:19

字符串时间到结构化时间的转化

time.strptime(时间字符串,字符串对应格式)

import time
print(time.strptime('2019-07-26','%Y-%m-%d'))

输出:
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)

import time
tp_struct=time.localtime()
print(time.asctime(tp_struct))

time.asctime(结构化时间)

import time
tp_struct=time.localtime()
print(time.asctime(tp_struct))

输出:Fri Jul 26 09:50:09 2019

时间戳和字符串的转化(国际化)

datetime模块

相比time来说,datetime模块接口更直观,更容易调用

    方法(类)       	                   描述                   
datetime.date   	       表示日期(类),常用属性year,month,day       
datetime.time   	表示时间(类),常用属性hour,mintue,second,microsecond

datetime.datetime 表示日期
datetime.timedelta 表示时间间隔
datetime.tzinfo 与时区有关的信息

import datetime
print(datetime.datetime.now())
输出:
import datetime
print(datetime.datetime.now())

sys模块

sys模块是与python解释器交互的一个接口

-处理命令行参数

-在解释器启动后,argv列表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称

序列化模块

概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程

str/bytes—>数据结构(反序列化) 数据结构—>str/bytes(序列化)

为什么要使用序列化?

-持久化数据类型

-跨平台交互使用

-使程序更易维护

json

json格式在各个语言中都可以通用序列化格式。在json中,所有的字符串必须为’’

json类型  	 python类型 
  {}    	   dict   
  []    	   list   

‘string’ str
1234.56 int/float
true/false True/False
null None

json的方法和属性

四个功能

-dumps 序列化,转换为字符串

-dump

-loads

-load

如果是元组,序列化强转为字典;如元组作为字典的键,序列化是报错

如果把数据类型直接序列化写入文件中,可以用dump和load方法

import json
dic={'name':'tom','age':18}
with open('dump_json','w') as f:
    json.dump(dic,f)   #dump方法可以接收一个文件句柄。直接将字典->字符串,写入文件中

pickle

只适用于python

内部中结构化的数据<—>格式pickle<—>bytes类型<—>保存在文件中或基于网络传输

优缺点:

优点:

    -支持python中几乎所有的类型

    -pickle会把数据类型序列化为bytes类型

缺点:

    -只支持python

模块提供四个功能:

-序列化

-dumps

-dump

-反序列化

-loads()

-load()

import pickle
dic={'name':'tom','age':12}
dic_b=pickle.dumps(dic)
print(type(dic_b))
dic_d=pickle.loads(dic_b)
print(type(dic_d))
输出:
<class 'bytes'>
<class 'dict'>

包是通过使用’.模块名’来组织python模块名称空间的方式,具体而言包就是一个包含__init__.py文件的文件夹

目的:用文件夹将文件、模块组织起来

注意:

​ ~python3中即使包中没有__init__.py也可以使用

​ ~python2中没有会报错

创建包的目的不是为了运行,而是为了被导入使用。

包的本质还是模块

注意:

-使用时,import 导入,若导入带点的,点的左边一定是包名

-import导入文件时,产生名称空间的名字源于文件,import包,名称空间同样源于文件(包)init.py,导入包的本质导入它

-单独导入包时,不会导入该包所包含的所有子模块

-用from导入时,import后不包含点

-from . import … 表明import后面的是被调用而不能被运行

-from school.api import * #*代表___all___里的内容

字符编码

python主要识别文件内容,而不是关心拓展名----解释器

字符–>机器翻译–>二进制

字符如何对应特定数字的标准,这个标准就是字符编码

ASCII

GBK

Unicode

UTF-8

对于英文字符来说,1bytes

对于中文,3bytes

对于内存而言都会基于Unicoude转换,再转回来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值