参与拿奖:本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.文件级操作
import os
import os.path #处理文件路径
import fileinput #使用命令行操作文件
import pathlib #含大量表示和处理文件系统路径的类
import tempfile #创建临时文件和文件夹
#os.access('1.txt','r+')
print(os.path.exists('test.txt'),end='\n') #查看文件是否存在
print(os.path.dirname('D:\\1.txt'),end='\n') #查看文件父目录
print(os.path.split('D:\\1.txt'),end='\n') #将路径分为两部分,分别为父目录和当前子目录
print(os.path.splitdrive('D::\\1.txt'),end='\n') #将目录路径分为磁盘(根目录)和目录
print(os.path.splitext('D:\\1.txt'),end='\n') #把路径分为路径和文件格式两部分
print([fname for fname in os.listdir(os.getcwd()) if os.path.isfile(fname) and fname.endswith('.py')],end='\n') #打印所有py文件
2.操作实例:
2.1修改指定文件的格式
#修改指定文件格式的格式(方法一)
file_list=os.listdir(".")
for filname in file_list:
pos=filname.rfind(".")
if filname[pos+1:]=="html":
newname=filname[pos+1:]+"htm"
os.rename(filname,newname)
print(filname+"更名为"+newname)
#方法二 使用列表推导公式
file_list1=[filename for filename in os.listdir(".") if filname.endswith(".html")]
for filename in file_list1:
newname=filename[:-4]+'htm'
os.rename(filename,newname)
print(filename,"更名为",newname)
2.2 文件和文件夹操作
import shutil #含大量方法支持文件和文件夹操作
print(dir(shutil),end='\n')
#压缩文件操作,将C目录下的文件夹1及其内容压缩到D盘的文件夹1.zip下
#print(shutil.make_archive('D:\\1','zip','C:\\1','DllS'))
#将刚刚压缩得到的文件解压缩到第二个参数路径下
#print(shutil.unpack_archive('D:\\1.zip','D:\\a_unpack'))
#删除刚刚得到的文件
#print(shutil.rmtree('D:\\a_unpack'),end='\n')
2.3 文件目录操作
print('获取当前目录:',os.getcwd(),end='\n')
print('创建目录:',os.mkdir(os.getcwd()+'\\temp'),end='\n')
print('改变当前目录:',os.chdir(os.getcwd()+'\\temp'),end='\n')
print(os.getcwd(),end='\n')
print('查看目录',os.listdir('.'),end='\n')
print('返回上级文件夹:',os.chdir(os.getcwd()+'\\..'),end='\n')
print('删除目录:',os.rmdir('temp'),end='\n')
2.4 使用递归遍历文件夹:
方法一:使用目录操作函数listdir()来实现
def visitdir(path):
if not os.path.isdir(path):
print('Error!')
return
for lists in os.listdir(path):
sub_path=os.path.join(path,lists)
print(sub_path)
if os.path.isdir(sub_path):
visitdir(sub_path)
path1='C:\\Users\\QinHsiu\\PythonProjects\\String\\oo'
visitdir(path1)
方法二:使用walk()函数来实现
#方法二,通过walk()方法指定遍历目录
def visidir2(path):
if not os.path.isdir(path):
print('error!',end='\n')
return
list_dir=os.walk(path)
for root,dirs,files in list_dir: #遍历该元组目录和文件信息
for di in dirs:
print(os.path.join(root,di),end='\n') #获取完整路径
for f in files:
print(os.path.join(root,f),end='\n') #获取绝对路径
visidir2(path1)
2.5 计算字符的crc32的值
import zlib #计算任意字符串的CRC32值
print('1234'.encode(),end='\n')
print(zlib.crc32('1234'.encode()),end='\n')
import binascii #计算任意字符串的CRC32值
print(binascii.crc32('1234'.encode()),end='\n')
2.6 计算文本行最长字符串长度
方法一
#计算文本行最长行的字符串的长度
fp=open('1.txt','r+')
allLines=[len(line.strip()) for line in fp]
fp.close()
logest=max(allLines)
print(logest,end='\n')
方法二
fp1=open('1.txt','r+')
logest1=max(len(line.strip()) for line in fp1)
fp1.close()
print(logest1,end='\n')
2.7 计算md5值
import string
import _md5 #计算md5值,用于文件的完整性保护
import hashlib
import sys
import os
md5value=hashlib.md5()
md5value.update('1234'.encode())
md5value=md5value.hexdigest()
print(md5value,end='\n')
md5value=_md5.md5()
md5value.update('12345'.encode())
md5value=md5value.hexdigest()
print(md5value,end='\n')
2.8 md5计算器
filename=sys.argv[1]
if os.path.isfile(filename):
with open(filename,'r') as f:
lines=f.readlines()
data=''.join(lines).encode()
print(hashlib.md5(data).hexdigest(),end='\n')
#计算哈希模糊值,用来得出两个文件相似百分比
#from ssdeep import ssdeep
#s=ssdeep.hash_from_file(filename)
#print(s,end='\n')
2.9 通过文件头来查看文件类型
def look(filename):
f=open(filename,'r')
first=tuple(f.read(4))
#print(first,end='\n')
f.close()
m=('T','X','T','8')
print(m,first,end='\n')
return first==m
print(look('1.txt'),end='\n')
2.10 判断两个文件是否相等
import difflib #判断两个文件是否相同
with open('1.txt','r') as f:
content1=f.read()
with open('2.txt','r') as f1:
content2=f1.read()
s=difflib.SequenceMatcher(lambda x:x=="",content1,content2)
result=s.get_opcodes()
for tag,i1,i2,j1,j2 in result:
print("%s content1[%d:%d]=%s content2[%d:%d]=%s"%(tag,i1,i2,content1[i1:i2],j1,j2,content2[j1:j2]),end='\n')
3.写入内容到Excel表格
3.1 使用xlwt模块实现写入操作
from xlwt import *
book=Workbook()
sheet1=book.add_sheet("First")
al=Alignment()
al.horz=Alignment.HORZ_CENTER #对齐方式
al.vert=Alignment.VERT_CENTER
borders=Borders()
borders.botton=Borders.THICK #边框模式
style=XFStyle()
style.alignment=al #对齐方式
style.borders=borders #边框
row0=sheet1.row(0) #设置第一行格式
row0.write(0,'test',style=style) #写入样式+内容
book.save(r'1.xls') #保存文件
3.2 使用xlrd模块实现读取
import xlrd
book1=xlrd.open_workbook(r'1.xls')
sheet2=book1.sheet_by_name('First') #
roww0=sheet2.row(0)
print(roww0[0],end='\n')
print(roww0[0].value,end='\n')
3.3 读取文本内容,转换字符大小写
def change(filename):
with open(filename,'r') as f:
s=[]
lines=f.read()
for i in lines:
if i.isupper():
s.append(i.lower())
else:
s.append(i.upper())
print(''.join(s),end='\n')
change('english')
4.学习笔记:
1.文件路径操作,使用os模块中的path程序包来完成;
2.文件目录操作,使用os模块的目录操作函数完成;
3.遍历文件夹可以使用递归的方式,也可以使用os模块中的walk()函数来实现;
4.使用zlib和binasii模块都可以将字符串转换为crc32值;
5.MD5用于文件的完整性保护,也可以通过计算哈希模糊值来得到两个文件的相似度,并且可以用于检测恶意代码;
6.文件对象的flush方法用来把缓冲区的内容写入到文件,但不关闭文件;
7.os.path模块中的isdir()和isfile()分别用来判断指定路径是否为目录和文件;
8.os模块的listdir()方法用来返回包括指定文件夹中所有文件和子文件的列表。