一般的文件打开方法:
f = open(os.path.join(os.path.dirname(__file__),'17python.txt'))
s = f.readline() # 一次读取一行内容
print(s)
f.close()
f.close()关闭流,如果是写入文件,不关闭流,可能会造成写入失败或是内容丢失。
使用with open() as f
with open的好处是,不用再使用close()方法,避免因忘记close()方法产生的错误。
open方法中的常用参数,open函数有很多的参数,常用的是file,mode和encoding
name就不解释了,文件名字符串,encoding=‘utf-8’,用来指定打开或写入文件的编码。
open(name[,mode[,buffering]])
其中mode 指定文件打开方式,
读写模式的类型有:
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
读取及写入文件
read()方法用来读取文件
write()方法用来写入文件
数据保存 一般保存没有什么大问题,主要是读取。 如果保存后是字符串,之前是list 或是 元组(Tuples)保存后就是字符串了,
再读取就需要转换成对应的容器,这里用eval(s)函数方法,效果还是比较不错的。
还有就是大文本在读取的时候如果一次用python read()全部读取的时候会出现莫明的无反应及读取内容不全的情况 ,这里采用分段读取比较好些:
with open(os.path.join(os.path.dirname(__file__),'17python.txt'), mode='r',encoding='utf-8') as f:
s = ''
while True:
temp = f.read(100)#分段读取,可以解决读取大文件时无法读取的奇怪问题
if temp == '':
break
s += temp
print(s)
import os
import time
###################################
# 路径的常用方法
###################################
print(__file__) #当前文件的完整地址
print(os.path.abspath('ospathtest.py'))#当前文件的完整地址
print(os.path.dirname(__file__)) #当前目录所属地址
print(os.path.isdir(os.path.dirname(__file__)))# 判断是否为路径
print(os.path.isfile(os.path.dirname(__file__)))# 判断是否为文件
print(os.path.exists(os.path.dirname(__file__)))# 判断文件或是目录是否存在
##################################
p = os.path.join(os.path.dirname(__file__), 'aaa')
os.mkdir(p) # 创建目录
time.sleep(3)# 暂停3秒,这样就可以在左侧目录中看到新建的'aaa'目录了
os.rmdir(p)
print(p)# 组装目录
print(os.path.split(__file__))# 分割路径与文件名
###################################
# os中的一些is get方法
###################################
path = __file__
print(os.path.getatime(path)) #返回最后一次进入此path的时间。
print(os.path.getmtime(path)) #返回在此path下最后一次修改的时间。
print(os.path.getctime(path)) #返回path的大小
print(os.path.getsize(path)) #返回文件大小,如果文件不存在就返回错误
print(os.path.isabs(path)) #判断是否为绝对路径
print(os.path.isfile(path)) #判断路径是否为文件
print(os.path.isdir(path)) #判断路径是否为目录
print(os.path.islink(path)) #判断路径是否为链接
print(os.path.ismount(path)) #判断路径是否为挂载点
递归删除当前目录下所有文件:
def delfiles(docxpath):
'''递归删除当前目录下所有文件'''
docxpath = os.path.join(docxpath)
if(os.path.exists(docxpath)):
for file in os.listdir(docxpath):
file_path = os.path.join(docxpath, file)
if os.path.isfile(file_path):
os.remove(file_path)
else:
shutil.rmtree(file_path)
将路径下的文件复制到新的目录下:
def copyfiletopath(path1, path2):
'''将路径下的文件复制到新的目录下'''
path1 = os.path.join(path1)
path2 = os.path.join(path2)
for file in os.listdir(path1):
file_path = os.path.join(path1, file)
if os.path.isfile(file_path):
shutil.copy(file_path, path2)
压缩指定文件夹:
def zipDir(dirpath, outFullName):
"""
压缩指定文件夹
:param dirpath: 目标文件夹路径
:param outFullName: 压缩文件保存路径+xxxx.zip
:return: 无
"""
zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
for path, dirnames, filenames in os.walk(dirpath):
# 去掉目标根路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(dirpath, '')
for filename in filenames:
zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
一些目录和文件操作的其他方法:
# 查找文件
def find_file(path,filename):
"""
:param path: 文件夹路径
:param filename: 文件名
:return: 找到的文件路径列表
"""
file_list = []
for root, dirs, files in os.walk(path):
for file in files:
if file == filename:
file_path = os.path.join(root, file)
file_list.append(file_path)
return file_list
# 查找文件夹
def find_dir(path,dirname):
"""
:param path: 文件夹路径
:param dirname: 文件夹名
:return: 找到的文件路径列表
"""
file_list = []
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir == dirname:
file_path = os.path.join(root, dir)
file_list.append(file_path)
return file_list
# 删除文件
def del_file(path):
for root, dirs, files in os.walk(path):
for file in files:
os.remove(os.path.join(root, file))
# 删除目录
def del_dir(path):
for root, dirs, files in os.walk(path):
for file in files:
os.remove(os.path.join(root, file))
for dir in dirs:
os.rmdir(os.path.join(root, dir))