文件读写操作
文本文件
# -*- coding: utf-8 -*-
import io
#创建文件hello.inp并写入内容
#方式一 使用open
output = open('hello.inp','w') #写入模式'r','w','a', 'w'模式再次写入会覆盖
tempstrs = ['hello','','caeer']
for str in tempstrs:
str = str+'\n'
output.writelines(str)
output.close()
#方式二
with open('hello.inp','w',encoding='utf-8') as file:
tempstrs = ['hello','','caeer']
for str in tempstrs:
str = str+'\n'
file.write(str)
#with open方法不需要关闭文件,写入结束后会自动关闭。
#读取文件hello.inp打印
#方式一
input= open('hello.inp','r')
lines = input.readlines()
print(lines)
for line in lines:
print (line)
input.close()
#方式二
with open('hello.inp','r') as f:
lines = f.readlines
print (lines)
for line in lines:
print(line)
csv 文件
import csv #导入模块
#方式一
f = open('C:/hello.csv','w',newline='')
writer = csv.writer(f)
strs = [['hello'],['CAEer'],['You','are','not','alone!']]
writer.writerows(strs)
f.close()
#方式二
with open('C:/hello.csv','w',newline='') as f:
writer = csv.writer(f)
strs = [['hello'], ['CAEer'], ['You', 'are', 'not', 'alone!']]
writer.writerows(strs)
#按列写入文件
headerline = ['x','y']
x = [1,2,3,4]
y = [2,5,5,6]
data = list(zip(x,y)) #收集数据
with open('C:/hello.csv','w',newline='') as f:
writer = csv.writer(f)
writer.writerow(headerline)
writer.writerows(data)
#读取文件
with open('C:/hello.csv','r',newline='') as f:
reader =csv.reader(f) #可迭代对像
for row in reader:
print(row)
读取目录下的文件名
import os
dir_path='c:/'
files = os.listdir(dir_path)
odbs=[file for file in files if '.odb' in file]
#上述代码获取了文件扩展名为.odb的所有文件名,并存入一个列表。
for root ,dirs, files in os.walk(dir_path):
pass #循环只执行了一次,os.walk(dir_path)是一个迭代器对象(节省内存)。
odbs=[root+file for file in files if '.odb' in file]
#使用walk方法,同样能实现上述功能,root-目录名,dirs-目录下的文件夹名,files-目录下的文件名。
总的来说,两种方法都能实现文件名的读取,对于想把文件名,文件夹名与路径分开来说,walk方法更好一点。
常用的目录操作
os.path
模块与 os
模块
方法 | 描述 |
---|---|
os.getcwd() | 获取当前工作目录 |
os.path.dirname() | 获取当前的父目录 |
os.path.join() | 将所给目录与文件名重新组合成一个完整的目录 |
os.path.isfile() | 用来判断所给定的路径所指目标是不是一个文件,是则返回true |
os.path.isdir() | 用来判断所给定的路径所指目标是不是一个文件 夹,是则返回true |
os.mkdir() | 以所给的path创建对应的目录 |
os.chdir() | 切换工作目录 |
os.path.splitext() | 可以把文件名和文件扩展名分离,放回(文件名,扩展名) |
os.path.remove() | 删除文件 |
os.path.rmdir() | 删除文件夹 |
文件的压缩和备份
使用 python
标准库中的zipfile库进行压缩保存文件
import os
import os.path
import zipfile
currdir = os.getcwd()
infor = os.listdir(currdir)
newDir = os.path.join(currdir,'test')
zipName = os.path.join(newDir,'test.zip')
try:
os.mkdir(newdir)
except:
print (' dir already exist')
#压缩
f = zipfile.ZipFile(zipname,'w',zipfile.ZIP_DEFLATED)
for item in infor:
tempdir = os.path.join(currdir,item)
if os.path.isfile(tempdir): #判断是否为文件
f.write(item)
#注意这里只给了文件名(item),是对当前工作目录下的文件压缩,否则需要切换工作目录。
f.close()
##解压
f = zipfile.ZipFile(zipname)
f.extractall(newDir)
f.close()
- zip压缩文件是包含被压缩文件的目录信息的,如果在压缩的时候指定文件的目录,那么解压的文件也会解压到相应的目录下,此时如果操作不当可能会覆盖原有的文件或目录,因此python解压zip文件需要小心
python
库中提供了单个文件的函数:ZipFile.extract(member[,path[,pwd]])
,用法与extratall
类似ZipFile.extractall([path[,members[,pwd]]])
是最简单的解压函数,可以使用members
来指定要解压出的文件名,pwd
是解压密码(可选)。