Python程序设计之文件操作(2)

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.操作实例:
①修改指定文件的格式

#修改指定文件格式的格式(方法一)
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)
    

②.文件和文件夹操作

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')

③文件目录操作

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')

④使用递归遍历文件夹:
方法一:使用目录操作函数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)

⑤计算字符的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')

⑥计算文本行最长字符串长度
方法一

#计算文本行最长行的字符串的长度
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')

⑦计算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')

⑧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')

⑨通过文件头来查看文件类型

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')

⑩判断两个文件是否相等

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表格
①使用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') #保存文件

②使用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')

③读取文本内容,转换字符大小写

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')
学习笔记:

1.文件路径操作,使用os模块中的path程序包来完成;
2.文件目录操作,使用os模块的目录操作函数完成;
3.遍历文件夹可以使用递归的方式,也可以使用os模块中的walk()函数来实现;
4.使用zlib和binasii模块都可以将字符串转换为crc32值;
5.MD5用于文件的完整性保护,也可以通过计算哈希模糊值来得到两个文件的相似度,并且可以用于检测恶意代码;
6.文件对象的flush方法用来把缓冲区的内容写入到文件,但不关闭文件;
7.os.path模块中的isdir()和isfile()分别用来判断指定路径是否为目录和文件;
8。os模块的listdir()方法用来返回包括指定文件夹中所有文件和子文件的列表。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值