文件概念与分类
为了保存数据,对其长期及进行操作,必须将数据一文件形式存储到外部存储介质(如磁盘 网盘 U盘等)
文件分为文本文件(易读、可写) 二进制文件(不可读 不能修改)
文件操作基本知识
无论文本文件还是二进制文件,其操作基本流程都是一致的,首先,打开文件并创建文件文件对象,然后通过该文件对象对文件内容进行读取、写入、删除、修改等操作,最后关闭并保存文件内容。
内置函数open()
open(file, model='r', buffering=1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
1.file指定的文件默认在当前文件夹中,如果不在当前文件夹中,最好使用绝对路径来指定文件位置。由于在Windows中路径分隔符的反斜线有可能和后面紧邻的字符组成转义字符,建议在字符串前面加字母r表示原始字符串。
2.不同的mode参数对于后续的读写操作有不同的影响,是内置函数open()的一个重要参数。
3.操作文本文件时,encoding参数非常重要,必须指定正确的编码格式才能正确读写文件中的内容。以二进制模式打开文件时,不能指定encoding参数。
4.使用内置函数open()既可以打开已有的文件,也可以创建新文件。
文件打开模式
r 读模式(默认模式, 可省略),如果文件不存在则抛出异常
w 写模式, 如果文件已存在, 先清空原有内容
x 写模式, 创建新文件, 如果文件已存在则抛出异常
a 追加模式, 不覆盖原有文件
b 二进制文件
+ 读、写模式
以r、 rb、 r+、 rb+、 w、 wb+、 x、xb+、xb、这些模式打开文件文件指针位于文件头
以a、 ab、 a+等模式打开文件时,文件指针位于文件尾部
f1 = open('file1.txt','r') #以读模式打开文件
f2 = open('file2.txt','w') #以写模式打开
f1.close()
文件对象常用方法
read() 读出来的是字节还是字符串 取决于文件的打开模式和文件本身的类型
readline()和readlines()只能读取以文本模式打开的文本文件
writelines()只能写入以文本模式打开的文本文件
write()写入文件时,参数S是字符串还是字节串取决于文件本身的类型及打开模式
读写操作都是从文件指针的当前位置开始读写,并且会自动修改文件指针的当前位置
文本文件操作
假设文件date.txt中有若干整数,每行一个整数,编写程序读取所有整数,将其按降序排序后在写入文本文件data_desc.txt中。
with open('data.txt','r') as fp:
data = fp.readlines() #读取所有行存入列表
data = [int(item) for item in data] #列表推导式转换为数字
data.sort(reverse=True)
data = [str(item) +'\n' for item in data]
with open('data_desc.txt','w') as fp:
fp.writelines(data)
统计文本文件中最长行的长度和该行的内容
with open('sample.txt')as fp:
result = [0, '']
for line in fp:
t = len(line)
if t>result[0]
result = [t, line]
print(result)
文件与文件夹操作
OS模块
listdir(path) 返回path目录下的文件和目录列表
mkdir (path) 创建文件夹 要求参数path指定的路径的上一级文件夹必须存在
remove(path)删除指定文件
rename(src, dst)重命名 文件移动
startfile(filepath[. operation])使用关联的应用程序打开指定文件或启动应用程序
os模块
startfile(filepath [, operation])
.startfile()函数的描述中,所谓“关联的应用程序”是指每个软件在安装时都会在系统注册表中登记信息表示自己可以打开哪些扩展名类型的文件,这样的话在资源管理器中双击一个文件时就会自动查询注册表然后使用相应的软件打开这个文件。例如,使用startfile()函数打开扩展名为doc或docx的文件就会自动打开Word或WPS,如果打开扩展名为txt的文件就会自动打开记事本程序,如果打开一个url就会自动打开默认的浏览器。
>>>import os
>>>import os.path
>>>os.rename('C:\\dig.txt','D:\\test2.txt')#renmae()可以实现文件的改名和移动
>>>[filename for filenmae in os.listdir() ]
if filename.endswith('.pyc','py','pyw')]
>>>os.getcwd()返回当前工作目录
>>>os.mkdir(os.getcwd()+'\\temp')
>>>os.listdir()
>>> import time
>>> time.strftime('%Y-%m-%d %H:%M:%S', #查看文件创建时间
time.localtime(os.stat('yilaizhuru2.py').st_ctime))
'2016-10-18 15:58:57'
>>> os.startfile('notepad.exe') #启动记事本程序
在代码第三行中,首先使用函数os.stat()获取文件属性,然后通过st_ctime获取文件创建时间(纪元秒数,也就是自纪元时间1970年1月1日0点0分0秒开始计算到现在经过的秒数),使用time.localtime()将纪元秒数转换为本地时间,再使用time.strftime()函数格式化为字符串。
>>> path='/home/qingjiao/Download/new_test.txt'
>>> os.path.dirname(path) #返回路径的文件夹名
'/home/qingjiao/Download'
>>> os.path.basename(path) #返回路径的最后一个组成部分
'Download'
>>> os.path.split(path) #切分文件路径和文件名
('/home/qingjiao/Download', 'new_test.txt')
>>> os.path.split('/home/qingjiao') #以最后一个斜线为分隔符
('home', 'qingjiao')
>>> os.path.split('/home//qingjiao//')
('/home/qingjiao', '')
>>> os.path.splitext(path) #切分文件扩展名
('/home/qingjiao/Download/new_test', '.txt')