文件操作
常见的文件类型:
- .txt
- .csv
- .json
- .html
- .mp4
文件操作流程
- 打开 —>open()
- 读/写 —>read()/write()
- 关闭 —>close()
文件的打开与关闭
内置函数:open(),创建一个file对象,之后才可以调用相关的用法
格式:
file_object=open(file,[,mode],[,encoding='utf-8'],[,buffering])
f=open(file,'r')读取操作
f=open(file,'w')覆盖原来数据写入
f=open(file,'a')添加新数据
f=open('./data/青花瓷.txt','r',encoding='utf-8')
print(f.read())
f.close()
1 青花瓷
2 素胚勾勒出青花笔锋浓转淡
.
.
.
30 你从墨色深处被隐去
解释:
- file_object —>open()返回的文件对象
- file —> 要打开的文件
- mode—>指定模式:只读,写入,追加等等。一般默认为只读
- encoding—>指定文件编码,usually,‘utf-8’/‘GBK’
- buffering—>若设置为0,不会有寄存;设为1,访问文件时会寄存行;设为大于1的数,表明是寄存区的缓冲大小;设为负数,则寄存区的缓存区大小为系统默认
mode的各种类型:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件对象的属性
属性 | 描述 |
---|---|
f.name | 返回文件的名称 |
f.mode | 返回打开文件的访问模式 |
f.closed | 如果文件已关闭,返回true;否则,Flase |
f=open('./data/青花瓷.txt','r',encoding='utf-8')
f.read()
print(f.name)
print(f.mode)
print(f.closed)
f.close()
print(f.closed)
./data/青花瓷.txt
r
False
True
关闭
f.close()
节省计算机资源和提供性能,使用完文件之后,关闭它
文件的读写
读
- f.read([size])
- 从文件指针处读取
- 传递size,指定读取的字节数
- readline()
- readlines()
f=open('./data/青花瓷.txt','r',encoding='utf-8')
print(f.read(4),end='')
print(f.read(4))
1 青花瓷
f=open('./data/青花瓷.txt','r',encoding='utf-8')
f1=f.readlines()
print(f1)
print(len(f1))
[' 1 青花瓷\n', ' 2 素胚勾勒出青花笔锋浓转淡\n', ...'29 在泼墨山水画里\n', '30 你从墨色深处被隐去']
30
f=open('./data/青花瓷.txt','r',encoding='utf-8')
for i in f:
print(i,end='')
# print(i.strip())
1 青花瓷
2 素胚勾勒出青花笔锋浓转淡
...
30 你从墨色深处被隐去
with open('./data/GreenFlowerPorcelain.txt','r',encoding='utf-8') as f:
print(f.read())
不用在末尾关闭文件
写
- write()
- writelines()
f=open('./data/城市学院.txt','w',encoding='utf-8')
f.write("i come from zucc")
f.close()
创建写入
f=open('./data/城市学院.txt','w',encoding='utf-8')
f.write("i come from city")
f.close()
覆盖写入
f=open('./data/城市学院.txt','w',encoding='utf-8')
seq=['zz','\n','dd']
f.writelines(seq)
f.close()
换行
定位读取
f.tell()
- 获取文件的当前位置
f.seek()
- f.seek()
- seek(offet[,from])
- offset,要移动的字节数
- from,指定偏移的参考位置
- 0—>从开头偏移
- 1—>当前位置偏移
- 2—>从末尾偏移
- seek(offet[,from])
模块(module)
开发过程中,程序代码会越来越多,如果直接放在一个文件里,代码会越来越长,代码不易维护。为了编写方便维护的代码,可以把不同功能的代码分组,保护在不同的文件里,这样,每个文件包含的代码量就会比较少,更方便维护。
在Python中,一个.py文件就可以称之为一个模块。
即:
- 包含相应功能的函数以及变量,py则以".py"为后缀名;
- 模块可以为其他的程序引用,以使用该模块所对应的函数或者变量。
使用的模块的优点:
- 提高代码的可维护性
- 提高代码的复用性
- 可以导入很多功能的模块
- 标准库模块
- 第三方模块
- 自定义模块
- 避免变量名重复(作用域)
Python中导入模块的常用方式:
import 模块名称
import 模块名称 as 新名称
from 模块名称 import 函数名
区别:
-
import 模块名称
和import 模块名称 as 新名称
- 会导入整个模块
- 如果我们需要使用某个函数,必须以’模块名称.函数名()'的形式来调用相应的函数(这种方法可以更有利于代码的可读性(优先推荐的方法))
- import 模块名称 as 新名称,重新命名导入的模块,通常使模块名称简洁,方便实用
import random print(random.random()) print(random.randint())
-
from 模块名称 import 函数名
- 只导入了某一个函数,而不是一整个模块
- 可以直接函数名称去调用函数,而无需在函数名称前加模块名称
- 如果我们的程序语句很多,不建议采用此种方法(原因:调用很多模块后,可能造成函数名重名,引发错误。)
from random import *
print(random())
print(randint(1,10))
import …
import … as …
from … import 函数
注意:
import语句的对应模块顺序(PEP)(程序最上方)
- Python标准模块
- 第三方
- 自定义模块
int(random.random())
print(random.randint())
- `from 模块名称 import 函数名`
- 只导入了某一个函数,而不是一整个模块
- 可以直接函数名称去调用函数,而无需在函数名称前加模块名称
- 如果我们的程序语句很多,不建议采用此种方法(原因:调用很多模块后,可能造成函数名重名,引发错误。)
```py
from random import *
print(random())
print(randint(1,10))
import …
import … as …
from … import 函数
注意:
import语句的对应模块顺序(PEP)(程序最上方)
- Python标准模块
- 第三方
- 自定义模块
os模块
operator system
os模块是Python标准库中用于访问操作系统功能的模块
使用os模块提供的接口,能够实现跨平台访问
最常见的操作:
- 目录的操作
- 判断
系统操作
-
os.sep:用于查看系统路径的分隔符
- Windows—>’\’
- ubuntu—>’/’
-
os.name:显示我们正在使用的平台
- Windows—>‘nt’
- ubuntu—>‘posix’
-
os.getenv()—>读取环境变量(environment)
-
os.getcwd()—>获取当前路径
目录操作—增删改查
- 查
- os.listdir():返回指定目录下的所有文件和目录名
>>> import os
>>> os.listdir() #未指定路劲,当前路径下
['.android', '.DMMGamePlayer', '.NEMU', '.PyCharm2018.1', '.THypervBox', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Favorites', 'Funshion', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'Microsoft', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'nginx.exe', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TM.blf', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'OneDrive', 'Pictures', 'pip', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'Videos', '「开始」菜单']
>>> dirs="D:\PycharmProjects" #指定路径下
>>> os.listdir(dirs)
['.idea', '1', 'venv']
- 查看文件的时间
- os.path.getmtime(path) 返回文件或者目录最后修改时间,结果为秒数—>modify
- os.path.getatime(path) 返回文件或者目录的最后访问时间,结果为秒数
- os.path.getctime(path) 返回文件或者目录的创建时间,结果秒数
>>> os.path.getmtime('asus')
1563702759.270714
>>> os.path.getatime('asus')
1563786894.12056
>>> os.path.getctime('asus')
1527127388.3632934
>>> import time
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getmtime('asus')))
'2019-07-21 17:52:39'
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getatime('asus')))
'2019-07-22 17:24:11'
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getctime('asus')))
'2018-05-24 10:03:08'
-
获取文件和目录
- os.walk(path)
>>> paths=os.walk('..') >>> for i in paths: ... print(i) ('..', ['.idea', '1', 'venv'], []) ('..\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'PycharmProjects.iml', 'workspace.xml']) ('..\\.idea\\inspectionProfiles', [], []) ....
-
增
-
目录的创建
- os.mkdir(path):创建目录,但仅创建一级目录
- os.makedirs(path):创建目录,创建多级目录
os.makedirs("os_test") # 当前目录创建 os.makedirs("main_file/sub_file")
-
-
删
- 目录的删除
- os.rmdir(path):删除目录(一级)
- os.removedirs(path):删除空目录(多级)
- os.remove(path):删除文件,必须是文件
- 目录的删除
os.removedirs("os_test")
os.removedirs("main_file/sub_file")
-
改
- 更改路径
- os.chdir(path):change direction # 将当前工作目录返回到指定目录
- os.rename(old_name,new_name)
>>> os.getcwd() 'C:\\Users\\asus' >>> os.chdir('..') >>> os.getcwd() 'C:\\Users' os.rename('xxx.txt','aaa.md')
- 更改路径
判断文件
- os.path.exists(path) 判断文件是否存在 识别文件或者目录 返回True或者False
- os.path.isfile(path):判断是否为文件,返回True或者False
- os.path.isdir(path) 判断是否为目录,返回True或者False
>>> os.path.exists('asus')
True
>>> os.path.isdir('asus')
True
>>> os.path.isfile('asis')
False
拓展:
- os.path.dirname(path):返回文件路径;
- os.path.basename(path):返回文件名;
- os.path.getsize(path):返回文件大小;
- os.path.abspath(path):返回文件绝对路径;
- os.path.join(path,name):连接目录与文件或者目录
- os.path.split(path): 将path的目录和文件名分隔开,并返回元组