第二章 python的日常使用

1、使用python处理文件与文件夹

os.getcwd()

获取当前python程序的运行路径

import os   
print(os.getcwd()) 
>>>D:\PythonProject\bangong
# windows中采用高反斜杠(\) 作为文件夹之间的分隔符
# Mac和Linux中采用斜杠(/)作为文件夹之间的分隔符
# python中反斜杠用于转义符  所以在windows中要打地址 就需要两个反斜杠\\

os.path.join(dir1,dir2,…)

让python自动处理不同环境下的路径链接

os.path.join()   
print(os.path.join('cuda','bin')) 
--------------------------------------
Windows下的输出结果:
'cuda\\bin'
Mac、Linux下的输出结果:
'cuda/bin'

os.listdir($path)

列出path路径下的所有文件和文件夹

print(os.listdir('E:/Desktop/cuda/'))
print(os.listdir())   #默认为当前路径
>>>['.idea', 'learn.py', 'main.py']

os.scandir($path)

扫描path路径下的文件

for file in os.scandir():
  print(file.name,file.path,file.is_dir())
>>>Media C:\Windows\Media True #文件
>>>mib.bin C:\Windows\mib.bin False #非文件

可以查询被返回的文件
for file in os.scandir():
 print(file.name, time.ctime(file.stat().st_ctime))  
# 以kb为当位
 print(file.name,
datetime.datetime.fromtimestamp(file.stat().st_ctime))

>>>cate.xls Sat Jun 18 01:21:32 2022
>>>cate.xls 2022-06-18 01:21:32.906468

也可以指定文件mian.py查询信息
print(os.stat('main.py'))
print(file.name,file.stat().st_size / pow(2,20))
#以MB为当位

st_size :文件的体积大小(单位: bytes),除以1024就是KB
st_atime:文件的最近访问时间
st_mtime:文件的最近修改时间
st_ctime: Windows下表示创建时间
st_birthtime:只在Mac、Linux下可用,表示创建时间

由于atime mtime ctime 都是从1970到现在的秒数 因此可以载入time模块 转化时间
转化法一: import time time.ctime(filetime)
转化法二: import datetime datetime.datetime.fromtimestamp(filetime)
在datetime转化后,可以通过datatime.datatime.fromtimestamp().hour/minute/second/year

例如找出path路径下某个后缀结尾的文件(不递归查询)
import os
def findend(str):
    path = 'C:\\Windows\\System32'
    count = 0
    files = []
    for file in os.scandir(path):
        if os.path.isdir(file) == False:
            files.append(file)
    for file in files:
        if file.name.endswith(f'.{str}'):
            count = count + 1
            print(file,count)
findend('png')
>>> <DirEntry 'wpcmon.png'> 1
找出某个路径及以下某个后缀结尾的文件(递归查询)

方法一:

def findend(str):
    path = 'C:\\Windows\\System32'
    count = 0
    files = []
    for dirname,dirpath,filesname in os.walk(path):
#如果只查找filesname则返回值为元组
        for filename in filesname:
            if filename.endswith(f'.{str}'):
                files.append(filename)
                count = count + 1
                print(dirname,filename,count)
findend('png')
>>> C:\Windows\System32 wpcmon.png 61

方法二:

def findend(str):
 path = 'C:\\Windows\\System32'
 print(glob.glob(f'{path}/*.{str}', recursive=True))
findend('dll')

f.readlines()

打开文件,读取内容

f = open('file1.txt','r','encoding='utf-8') #打开文件
  text = f.readlines()  #读取文件
    print(text)  #输出文件
f.close  #关闭文件

f.write()

写入文件内容

with open('file2.txt','w',encoding='utf-8')as f:
  text = '第一行内容\n 第二行内容'
  f.write(text)

TemporaryFile()

创建临时读取文件,程序运行完后自动删除

from tempfile import TemporaryFile
f = TemporaryFile('w+')  #w+ 表示读取及写入文件
f.write('Hello phato!')
f.seek(0)  #写完后光标需要回到文件开头位置
data = f.readlines()
print(data)
f.close()

TemporaryDirectory()

创建临时文件夹

from tempfile import TemporaryDirectory
with TemporaryDirectory() as temp_folder:
  print(f'临时文件夹已经创建:{temp_folder}')
>>>临时文件夹已经创建:C:\Users\AppData\Temp\tmpkx

os.walk(path)

遍历子文件目录

import os
for dirpath,dirname,filenames in os.walk(path):
  print(f'发现文件夹:{dirpath}')
  print(filenames)
>>>发现文件夹:./new1\new4
>>>['f.txt', 'firstname.txt']

字符串.startwith() 字符串.endswith()
.startwith() 和.endswith() 以什么开头,以什么结尾
print('abc.txt'.startswith('ab'))
print('abc.txt'.endswith('.txt'))
# 字符串A.startswith(字符串B):字符串A是否以字符串B开头
# 字符串A.endswith(字符串B)  :字符串A是否以字符串B结尾

glob.glob(str,recursive)

寻找通配符形式 通配符有* ? [seq] -[0-9] [A-Z] ![seq] ![0-9]

import glob
print(glob.glob('*py'))  
#找出当前文件夹下的py文件
print(glob.glob('**/*.txt',recursive=True)) 
#向下递归找出子文件夹的txt文件

fnmatch.fnmatch(str)

用来匹配文件名

import fnmatch
print(fnmatch.fnmatch('mmakerbean','m*an'))
>>>True
print(fnmatch.fnmatch('filename.txt','fil*.txt'))
>>>True

os.exists() 与 os.mkdir()、os.makedirs()

创建文件夹

import os 
if not os.path.exists('new_filename')
  os.mkdir('new_filename')
#迭代创建多级目录
os.makedirs('第一级dir/第二级dir/第三级dir')

shutil.copy() 或 shutil.move()

用来进行文件处理,可以复制、移动、删除
shutil.copy(filename,path或path/rename)
shutil.copytree(dirname,path或path/rename)

import shutil
shutil.copy('E:/top/first.txt','./new1/new2/')
#复制文件first.txt到指定目录/new2/下
shutil.copytree('new2/','new1/new/')
#将new2文件夹下的文件复制到new1下的new文件夹中

shutil.move(filename,path)
shutil.rmtree(dirname)

import shutil
shutil.move('new1/new2/first.txt','new2/f2.txt') 
#frist.txt文件移动并从重命名为f2.txt
shutil.move('new1/f.txt','new2/')  
#f.txt文件移动到new2目录下
shutil.move('new2','new1/new4')  
#new2目录移动到new1目录的new4文件夹下
shutil.rmtree('new1/new2')   
#迭代删除文件夹及其子文件夹

os.rename() os.remove

文件的重命名与删除

import os
os.rename('f2.txt','new1/f2.txt')
#重命名文件,具有移动功能
os.remove('new1/f2.txt')
#删除文件

删除某个目录下所有指定后缀的文件
import shutil
def remdir(path,endstr):
    for dirname,dirpath,filesname in os.walk(path):
        for filename in filesname:
            if filename.endswith(endstr):
               print('Deleting  ' + dirname+'\{}'.format(filename))
               os.remove(dirname+'\{}'.format(filename))
    print('Delete successfully!!')

remdir('F:\迅雷下载','zip')
>>> Deleting  F:\迅雷下载\yjmdl.zip
>>> Delete successfully!!
删除某个目录下指定后缀的文件及其父文件夹
#这个操作一定要谨慎,因为只要含有某个后缀的文件夹都会被删除
import os,shutil
def remdir(path,endstr):
    for dirname,dirpath,filesname in os.walk(path):
        for filename in filesname:
            if filename.endswith(endstr):
                print('Deleting  ' + dirname+'\{}'.format(filename))
                shutil.rmtree(dirname)
    print('Delete successfully!!')

更改某个目录下所有文件的文件名

这个方法主要解决很多很长的前缀名文件,为了缩短前缀名而修改文件名。

import os
def rnfile(filepath,pun,punum):
    for dirpath,dirname,filesname in os.walk(filepath):
        for filename in filesname:
            if filename.startswith(pun):
                newname = filename[int(punum):]
                # print(dirpath+f'/{filename}')
                print('rename: '+ dirpath + '/{}'.format(filename), +'—→'+dirpath + '/{}'.format(newname))
                os.rename(dirpath + '/{}'.format(filename),dirpath + '/{}'.format(newname))
rnfile('K:\数据分析方法','【','16')

zipfile.ZipFile(zip_path,'r')

读取压缩包内的文件

with zipfile.ZipFile('./project.zip','r') as zipobj:
    for file_name in zipobj.namelist():
        print(file_name.encode('cp437').decode('gbk'))
#处理压缩包中的cp437编码为中文转码gbk
zipobj.getinfo(file_name)

读取压缩包内文件信息

with zipfile.ZipFile('./project.zip','r') as zipobj:
    for file_name in zipobj.namelist():
        info = zipobj.getinfo(file_name)
        new_file_name = file_name.encode('cp437').decode('gbk')# 调整编码
        print(new_file_name,info.file_size,info.compress_size)
#info.file_size :原始文件大小   info.compress_size:压缩后文件大小  输出是字节
zipobj.extract(zip_file_name,zip to path)

解压压缩包中的文件

with zipfile.ZipFile('./project.zip','r') as zipobj:
    zipobj.extract('feee.txt','./') #将其中的feee文件解压到当前目录下
    zipobj.extractall('./') #q全部解压到当前目录下,
   # zipobj.extractall(path,pwd=b'key')   密码输入时需有个b
zipobj.write(filename/filelist)

创建压缩包

file_list = ['main.py','learn.py']  #将py文件打包压缩
with zipfile.ZipFile('pyzip.zip','w') as zipobj:
    for file in file_list:
        zipobj.write(file)
#追加压缩   就是 with zipfile.ZipFile('pyzip.zip','a') as zipobj:  
#用a 追加
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • python 办公 一、文件处理 1、输出目录下所有文件及文件夹 获取当前python程序运行目录import o...
    wscfan阅读 518评论 0 5
  • 一.OS模块 一).OS模块的概念: Python os模块是Python提供的访问操作系统功能的模块,如打开、读...
    月亮是我踢弯得阅读 4,018评论 0 3
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,744评论 0 8
  • 参考:http://blog.csdn.net/wuce_bai/article/details/50827393...
    Babyzpj阅读 797评论 0 0
  • sys 和Python解释器关系密切的标准库 sys.__doc__中已经说明了:这个模块提供了对一些对象的访问使...
    丘山Ivan阅读 1,626评论 0 1