python学习笔记9-目录和文件读写

一.常见相关引用模块

import os: 用于目录操作如获取路径等功能
import re:用于查找匹配等
import shutil:用于目录复制移动等
import zipfile,tarfile: 用于压缩和解压缩
import time:用于获取时间相关功能
import stat:用于权限设置等功能
import logging:用于日志记录等功能

二.目录相关

引:https://www.runoob.com/python/os-file-methods.html

os.chdir(path) 改变当前工作目录
os.chmod(path, mode)更改权限
os.getcwd()返回当前工作目录
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.mkdir(path[, mode])创建单个文件夹,即父目录不存在则不能创建
os.mkdirs(path[, mode])创建父子文件夹,即父目录不存在则一起创建

import os
os.mkdir('d:\123\test')#123不存在则不会创建test
os.mkdirs('d:\123\test')#123不存在则连123都一起创建

os.rmdir(path)删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.rename(src, dst)重命名文件或目录,从 src 到 dst

os.path.abspath(path) 返回绝对路径
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路径
os.path.exists(path) 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.isdir(path) 判断路径是否为目录,也可以用来判断路径是否存在
os.path.exists(path) 判断路径是否存在
os.path.islink(path) 判断路径是否为链接
os.path.abspath(path) 返回绝对路径
os.path.dirname(path) 返回文件路径
os.path.join(path1[, path2[, …]]) 把目录和文件名合成一个路径

import os
path=r'd:\123'
file1='test.txt'
print(os.path.join(path,file1))#'d:\123\test.txt'

os.path.split(path) 把路径分割成 dirname 和 basename,返回一个元组
os.path.splitext(path) 分割路径,返回路径名和文件扩展名的元组

path=r'd:\123\test.txt'

print(os.path.split(path))#('d:\\123', 'test.txt')
print(os.path.splitext(path))#('d:\\123\\test', '.txt')

os.path.walk(path, visit, arg) 遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数

import os
path='指定一个文件夹'

    for root,dirs,files in os.walk(path):
        for name in files:
        	print(name) #打印所有文件名
		for folder in dirs:
			print(folder) #打印所有文件夹名

shutil.rmtree(目标目录):可以递归删除目录下的目录及文件。
shutil.copy(“oldfile”,“newfile”) 复制文件夹: oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copytree(“olddir”,“newdir”) olddir和newdir都只能是目录,且newdir必须不存在
shutil.move(“oldpos”,“newpos”) 移动文件(目录)

三.文件相关

引:https://www.runoob.com/python3/python3-file-methods.html

os.path.isfile(path) 判断路径是否为文件
os.path.samefile(path1, path2) 判断目录或文件是否相同
os.remove(path)删除一个文件
with open(“test.txt”,w) as f: 直接打开一个文件,如果文件不存在则创建文件
关于open 模式:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:

os.stat()函数可以获取文件的属性,该函数会返回一个和系统平台有关的stat_result对象,
具备一组可访问的属性,可以通过 stat_result.attribute 这样的格式来访问各个属性的值。

字 段描 述
st_modeinode 保护模式
st_inoinode节点号
st_devinode驻留的设备
st_nlinkinode的链接数
st_uid所有者的用户 ID
st_gid所有者的组 ID
st_size普通文件以字节为单位的大小,包含等待某些特殊文件的数据
st_atime上次访问的时间
st_mtime最后一次修改的时间
st_ctime由操作系统报告的 ctime。在某些系统上(如 UNIX)是最新的元数据更改的时间,在其他系统上(如 Windows)是创建时间
常见模式
模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(Python 3 不支持)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
file对象的常见函数

1
file.close()

关闭文件。关闭后文件不能再进行读写操作。

2
file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3
file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4
file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

5
file.next()

Python 3 中的 File 对象不支持 next() 方法。

返回文件下一行。

6
file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

7
file.readline([size])

读取整行,包括 “\n” 字符。

8
file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

9
file.seek(offset[, whence])

移动文件读取指针到指定位置

10
file.tell()

返回文件当前位置。

11
file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。

12
file.write(str)

将字符串写入文件,返回的是写入的字符长度。

13
file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。
shutil.copymode(文件1,文件2):只拷贝权限,内容组,用户,其余均不变。
shutil.copystat(文件1,文件):只拷贝了权限。

压缩和解压缩文件
import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
# 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件  
z.write(r'c:\test')
#往压缩包里面放东西,要具体到目录或文件名
z.write(r'd:\data.data')
z.close()
 # close() 是必须调用的!
 
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()
os.open(file, flags[, mode])

参数
file – 要打开的文件

flags – 该参数可以是以下选项,多个使用 “|” 隔开:

os.O_RDONLY: 以只读的方式打开
os.O_WRONLY: 以只写的方式打开
os.O_RDWR : 以读写的方式打开
os.O_NONBLOCK: 打开时不阻塞
os.O_APPEND: 以追加的方式打开
os.O_CREAT: 创建并打开一个新文件
os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
os.O_EXCL: 如果指定的文件存在,返回错误
os.O_SHLOCK: 自动获取共享锁
os.O_EXLOCK: 自动获取独立锁
os.O_DIRECT: 消除或减少缓存效果
os.O_FSYNC : 同步写入
os.O_NOFOLLOW: 不追踪软链接
mode – 类似 chmod()。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os, sys

# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )

# 写入字符串
os.write(fd, "This is test")

# 关闭文件
os.close( fd )

print "关闭文件成功!!"
os.chmod()方法

此方法通过数值模式更新路径或文件权限。该模式可采取下列值或按位或运算组合之一:

stat.S_ISUID: Set user ID on execution.
stat.S_ISGID: Set group ID on execution.
stat.S_ENFMT: Record locking enforced.
stat.S_ISVTX: Save text image after execution.
stat.S_IREAD: Read by owner.
stat.S_IWRITE: Write by owner.
stat.S_IEXEC: Execute by owner.
stat.S_IRWXU: Read, write, and execute by owner.
stat.S_IRUSR: Read by owner.
stat.S_IWUSR: Write by owner.
stat.S_IXUSR: Execute by owner.
stat.S_IRWXG: Read, write, and execute by group.
stat.S_IRGRP: Read by group.
stat.S_IWGRP: Write by group.
stat.S_IXGRP: Execute by group.
stat.S_IRWXO: Read, write, and execute by others.
stat.S_IROTH: Read by others.
stat.S_IWOTH: Write by others.
stat.S_IXOTH: Execute by others.
语法:

os.chmod(path, mode);

参数:

path: This is the path for which mode would be set.
mode: This may take one of the above mentioned values or bitwise ORed combinations of them:

#!/usr/bin/python 
import os, sys, stat 
# Assuming /tmp/foo.txt exists, Set a file execute by the group. 
os.chmod("/tmp/foo.txt", stat.S_IXGRP) 
# Set a file write by others. 
os.chmod("/tmp/foo.txt", stat.S_IWOTH) 
print "Changed mode successfully!!" 
This produces following result: 
Changed mode successfully!! 
os.chmod("/tmp/foo.txt", stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) # mode:777 
其他命令

os.system() :调用shell

import os
os.system('cmd')
其他

查找指定目录中大于1G的文件,获取路径和大小,输出到txt和excel中。

import os
import xlwings as xw
import datetime
import xlsxwriter

x=[]
y=[]
#指定查找路径
path='D:\\tools'

for dir,path,file in os.walk(path):

    for j in file:
        try:
            if j.endswith('.dll')==False and float(os.path.getsize(os.path.join(dir,j))/1024/1024/1024)>1 :

                x.append(os.path.join(dir,j)+'大小:'+format(float(os.path.getsize(os.path.join(dir,j))/1024/1024/1024),'.2f')+'G')
                y.append(os.path.join(dir,j))
        #排除有问题的文件如dll,temp之类的
        except FileNotFoundError:
                x=x
                y=y
                print(x)
#存成txt
with open('D:\\hello\\x.txt','w') as f:
    for i in x:

        f.write(str(i)+'\n')
#存成excel
workbook = xlsxwriter.Workbook(r'D:\hello\x.xlsx')
worksheet = workbook.add_worksheet('大文件')
worksheet.set_column('A:A',130)
worksheet.write('A1','文件路径')
worksheet.write('B1','文件大小/G')
for i in range(0,len(y)):
    worksheet.write('A'+str(i+2), y[i])
    worksheet.write('B' + str(i + 2), z[i])
workbook.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值