文件读写操作

文本文件

# -*- 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是解压密码(可选)。