今天我们汇总整理下文件读写的一些事情,对文本分析系列课做一些有意义的补充。涉及到的库包括os、shutil、zipfile 获取信息
改变文件系统文件系统因为下面的操作发生变化,比如压缩解压、新建文件夹、复制移动、移除
压缩与解压
一、获取信息1.1 os.getcwd()获取当前工作路径 import osos.getcwd() 运行得到 '/Users/suosuo/Desktop/20190224文件系统操作方法概括'1.2 os.listdir()获取当前工作文件夹内的文件夹或文件 os.listdir()得到 ['.DS_Store', '未命名.ipynb', '.ipynb_checkpoints', 'data', 'data2']1.3 os.scandir()获取当前工作文件夹内的文件夹或文件。类似于os.listdir(),但是返回的是可迭代对象 os.scandir()运行结果 <posix.ScandirIterator at 0x1074b5090>遇到上面的,我们就要想到for循环迭代,看看ta是什么鬼 for f in os.scandir():if not f.is_file(): #is_file判断是否是文件 print('这是文件夹:',f) else: print('这是文件:', f) #print(type(f), f)这是文件: <DirEntry '.DS_Store'> 这是文件: <DirEntry '未命名.ipynb'> 这是文件夹: <DirEntry '.ipynb_checkpoints'> 这是文件夹: <DirEntry 'data'> 这是文件夹: <DirEntry 'data2'> 1.4 os.walk()随机漫走 os.walk(top='data')运行得到 <generator object walk at 0x1073d4c78>得到生成器的数据,也是要想到for循环迭代 for x in os.walk(top='.'):print(x)('.', ['.ipynb_checkpoints', 'data', 'data2'], ['.DS_Store', '未命名.ipynb']) ('./.ipynb_checkpoints', [], ['未命名-checkpoint.ipynb']) ('./data', ['test'], ['.DS_Store']) ('./data/test', [], ['.DS_Store', '学习文件操作.txt']) ('./data2', [], []) 二、改变文件系统2.1 os.chdir()变换工作路径 print(os.getcwd())os.chdir('/Users/suosuo/Desktop') os.getcwd()/Users/suosuo/Desktop/20190224文件系统操作方法概括'/Users/suosuo/Desktop' 2.2 os.path.join()拼接多个字符串,形成新的路径字符串。os.path.join()内不能传入tuple os.path.join('desktop', 'data', 'python学习.md')运行得到 'desktop/data/python学习.md'下面的代码,是个bug path = ('desktop', 'data', 'python学习', '笔记.md')os.path.join(path)--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-9bb1ad13c0bb> in <module> 1 path = ('desktop', 'data', 'python学习', '笔记.md') ----> 2 os.path.join(path)/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/posixpath.py in join(a, *p) 78 will be discarded. An empty last part will result in a path that 79 ends with a separator.""" ---> 80 a = os.fspath(a) 81 sep = _get_sep(a) 82 path = aTypeError: expected str, bytes or os.PathLike object, not tuple 2.3 os.makedirs()创建新的文件夹 os.chdir('20190224文件系统操作方法概括')os.makedirs('data2') 2.4 os.remove()移除一个文件 os.remove('data/移除.txt')2.5 os.rmdir()移除文件夹,但是这个被移除的文件夹必须是空的才能移除 #test内有文件,所以移除会报错os.rmdir('data/test')--------------------------------------------------------------------------- OSError Traceback (most recent call last) <ipython-input-32-dc6cea8f9fda> in <module> ----> 1 os.rmdir('data/test')OSError: [Errno 66] Directory not empty: 'data/test' 2.6 os.rename(old, new)将old文件名(或路径)改为new文件名(或者路径) os.rename('data/test/重命名rename.txt', 'data/test/重命名rename2.txt')2.7 shutil.copy(src, dst)将src复制到dst中 import shutilshutil.copy('data/移除.txt', 'data2') data2文件夹中多了一个 "移除.txt" 2.8 shutil.move(src, dst)将src移动到dst中 shutil.move('data/dong.txt', 'data2')data文件夹中的dong.txt消失了,data2中出现了dong.txt文件 2.9 shutil.rmtree()移动一个文件夹内的全部文件和文件夹 shutil.rmtree('data2')三、压缩与解压这部分内容实际上之前分享过文件的压缩与解压库-zipfile、tarfile,今天就当复习一下吧。zipfile和tarfile是python内置库 3.1 新建zip文件对data文件夹进行压缩 import zipfile#将 “三体.txt” 压缩到 “三体.zip”中 with zipfile.ZipFile('三体.zip', 'w') as z: #请注意这里写的是当前文件夹下的文件名 z.write('三体第一部.txt') z.write('三体第二部.txt') z.write('三体第三部.txt') 当前文件夹中出现 “三体.zip” 文件3.2 解压zip文件with zipfile.ZipFile('三体.zip', 'r') as z:# 查看压缩包中的文件列表 print(z.namelist()) # 解压 “三体.zip”中的 “三体第一部.txt”文件 z.extract('三体第一部.txt') # 解压,在当前文件夹下会出现一个名为"三体extractall"的文件夹 z.extractall('三体extractall') ['三体第一部.txt', '三体第二部.txt', '三体第三部.txt'] 当前文件夹出现一个 “三体extractall” 文件夹 回复关键词“20190225”,得到本文jupyter notebook下载链接 AD、转发、好看 |
|