文件读取、压缩 批量重命名

路径拼接

目录拼接并输出。不同系统上输出不同,取决于文件系统表示。
import os

print(os.path.join('usr', 'bin', 'spam'))
windows上为'usr\bin\spam', linux上为'/usr/bin/spam'

目录与文件路径

myfiles = ['acc.txt','bbb.csv','cedg.docx']
for filename in myfiles:
    print(os.path.join('C:\\users\\aswttt',filename))

os.chdir('C:\\Windows\\System32')     # 更改当前目录
os.getcwd()                           # 显示当前目录
os.makedirs('d:\\test\\l1\\l2')       # 创建目录
os.path.abspath('.')                  # 相对路径转绝对路径
os.path.isabs('.')                    # 判断是否绝对路径
os.path.relpath('c:\\windows','c:\\test\\l1')    #返回从参数2路径到参数1路径转换的相对路径字符串 '..\\..\\windows'
lpath = 'c:\\windows\\system32\\calc.exe'
os.path.basename(lpath)                # 文件名
os.path.dirname(lpath)                 # 目录名
os.path.split(lpath)                   # 返回包含目录名和文件名两个字符串的元组
lpath.split(os.path.sep)               # 返回一个对路径进行分割的字符串的列表
os.path.exists(lpath)                  # 目录或文件是否存在
os.path.isfile(lpath)                  # 判断文件有效性
os.path.isdir(os.path.dirname(lpath))  # 判断目录有效性

文件遍历

os.path.getsize(lpath)                 # 返回文件的字节数大小
os.listdir('c:\\temp')                 # list目录中的子目录和文件名
totalSize = 0
for filename in os.listdir('c:\\temp'):
    totalSize += os.path.getsize(os.path.join('c:\\temp',filename))
print(totalSize)

文件读取

fpath = 'D:\桌面\\1.txt'
rfile = open(fpath,"r")                    # 打开文件,默认为只读r
rtxt = rfile.read()                    # 读取文件内容,赋给一个字符串
print(rtxt)
#问题待解决
rlines = rfile.readlines()             # 读取文件内容,赋给一个字符串列表,每个字符串是文本中的每行
print(rlines)
wfile = open('c:\\temp\\2.txt','w')    # 写模式打开文件,直接清空文件后覆写
wfile.write('Hello world!\n')
wfile.close()
wfile = open('c:\\temp\\2.txt','a')    # 追加模式打开
wfile.write('Append mode open')
wfile.close()
wfile = open('c:\\temp\\2.txt','r')
content = wfile.read()
wfile.close()
print(content)

## 用shelve模块保存变量,生成到二进制的shelf文件
import shelve
shelfFile = shelve.open('mydata')      # 生成mydata.dat文件
cats = ['zophis','pooka','simon']
bats = ['test','AA']
shelfFile['cats'] = cats               # 生成mydata.dir文件
shelfFile['bats'] = bats
shelfFile.close()                      # 生产mydata.bak文件

shelfFile = shelve.open('mydata')      # 打开shelf文件使用保存的变量
type(shelfFile)                        # 显示数据类别  <class 'shelve.DbfilenameShelf'>
print(shelfFile['cats'])               # 返回一个key的值
print(dict(shelfFile))                 # 文件内容转换成字典返回
list(shelfFile.keys())                 # 显示保存在shelf文件中所有变量的keys
list(shelfFile.values())               # 显示保存在shelf文件中所有变量的values
shelfFile.close()
# import pprint
# cats = [{'name':'Sosdf','desc':'chubby'},{'name':'Poka','desc':'fluffy'}]
# pprint.pformat(cats)
# fileobj = open('myppdata.py','w')
# fileobj.write('cats = '+pprint.pformat(cats)+'\n')
# fileobj.close()
#
# import myppdata                        # 装载之前保存变量的py文件
# myppdata.cats
# myppdata.cats[0]
# myppdata.cats[0]['name']

shutil与文件复制删除

## shutil与文件复制删除
import shutil,os
shutil.copy('c:\\temp\\1.txt','c:\\temp\\test')
shutil.copy('c:\\temp\\1.txt','c:\\temp\\test\\n1.txt')
# 要把C盘的intest文件夹复制到C盘的test文件夹里并命名为intest2
shutil.copytree('c:\\temp\\test\\intest','c:\\temp\\test\\intest2')
shutil.move('c:\\temp\\1.txt','c:\\temp\\test\\intest2')   # 移动文件到目的文件夹(不存在时移动成一个新文件)
## 上条move及以下三条均为危险命令,要格外当心
os.unlink('d:\\t_path\\1.txt')         # 彻底删除文件
os.rmdir('d:\\t_path')                 # 彻底删除空目录
#shutil.rmtree('d:\\t_path')           # 彻底删除目录及其所有内容
# 遍历txt文档
for filename in os.listdir():
    if filename.endswith('.rxt'):
        #os.unlink(filename)
        print(filename)
## 使用 send2trash 模块进行安全删除 - 放到回收站
import send2trash
send2trash.send2trash('c:\\temp\\test\\n1.txt')
send2trash.send2trash('c:\\temp\\test\\intest2')

遍历目录树 os.walk()

# os.walk()在循环的每次迭代中,返回3个值 - 当前文件夹名称串、当前文件夹中子文件夹的字符串列表、当前文件夹中文件的字符串列表
#      这里的当前文件夹时指walk()循环当前迭代的文件夹,程序本身的工作目录不会因walk而改变
#      可以使用自定义的代码,来替代以下代码中的print函数调用
import os
for folderName,subfolders,filenames in os.walk('c:\\temp\\test'):
    print('The current folder is ' + folderName)
    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder )
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': ' + filename )
    print('')
print('')

zipfile模块处理压缩文件

import zipfile,os
currentpwd = os.getcwd()
os.chdir('C:\\temp\\test')
exampleZip = zipfile.ZipFile('example.zip','a')  # 以追加模式打开压缩文件
exampleZip = zipfile.ZipFile('example.zip','w')  # 以覆盖写入模式创建压缩文件
exampleZip.write('1.txt',compress_type=zipfile.ZIP_DEFLATED)  # 添加文件到压缩文件
exampleZip.close()
exampleZip = zipfile.ZipFile('example.zip')      # 默认以只读方式打开压缩文件,不存在则报错
spamInfo = exampleZip.getinfo('1.txt')           # 获取文件信息
spamInfo.file_size                               # 显示文件大小
spamInfo.compress_size                           # 显示压缩后文件大小
'Compressed range is %s x !' % round(spamInfo.file_size / spamInfo.compress_size ,2)     #压缩倍数
exampleZip.extract('1.txt')                      # 解压缩文件到当前目录 
exampleZip.extract('1.txt','ext_dir')            # 解压缩文件到指定文件夹,如不存在则创建
exampleZip.extractall()                          # 解压缩全部文件
exampleZip.extractall('c:\\temp\\test\\2')       # 解压缩全部文件到指定文件夹,如不存在则创建
exampleZip.close()
os.chdir(currentpwd)

不要害怕告别,要相信,四季更替,花开花落,都是命中注定。