文件腾转挪移操作,那都不是事儿

栏目: Python · 发布时间: 5年前

内容简介:今天我们汇总整理下文件读写的一些事情,对文本分析系列课做一些有意义的补充。涉及到的库包括os、shutil、zipfile文件系统因为下面的操作发生变化,比如压缩解压、新建文件夹、复制移动、移除

最近公众号内推送了我的系列视频教程《 python文本分析:从入门到精通 》,这个课程的分享原则是只讲最简单最好用的知识,用最少的时间去解决最头疼的问题。这样对于 人文社科类 python初学者 会降低认知压力,增强学习自信。

今天我们汇总整理下文件读写的一些事情,对文本分析系列课做一些有意义的补充。涉及到的库包括os、shutil、zipfile

获取信息

代码 功能

os.getcwd("path")

获取代码当前工作路径

os.listdir("path")

获取当前工作文件夹内的文件夹或文件

os.scandir("path")

获取当前工作文件夹内的文件夹或文件

os.walk(top)

通过在top中游走输出在top中的文件名,向上或者向下。每次遍历对象返回的是三元组(root,dirs,files)

改变文件系统

文件系统因为下面的操作发生变化,比如压缩解压、新建文件夹、复制移动、移除

代码 功能

os.chdir("path")

更改当前工作路径为path

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

路径拼接为dir1/dir2/dir3

os.makedirs("dir1/dir2")

创建文件夹

os.remove("my_file_path")

移除一个文件

os.rmdir("path")

会删除path路径文件夹,如果path内有文件,移除path会报错

os.rename("old", "new")

对old这个文件或者路径更改为新名new

shutil.copy("source", "destination")

复制一个文件或者文件夹(source)到另外一个文件夹(destination)

shutil.move("source", "destination")

移动一个文件或者文件夹(source)到另外一个文件夹(destination)

shutil.rmtree("my_directory_path")

移除一个文件夹及其内部的所有文件和文件夹

压缩与解压

代码 功能

dzipfile.ZipFile('zip文件.zip', 'w')

新建zip文件

zipfile.ZipFile('zip文件.zip', 'r')

打开zip文件

一、获取信息

1.1 os.getcwd()

获取当前工作路径

import os 
os.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 = a
TypeError: 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 shutil 

shutil.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、转发、好看 文件腾转挪移操作,那都不是事儿


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Blockchain Basics

Blockchain Basics

Daniel Drescher / Apress / 2017-3-16 / USD 20.99

In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码