DataWhale-python自动化学习 Task 01 文件自动化处理

本文介绍了Python中的文件处理,包括文件路径、工作目录、路径操作、文件读写以及文件和文件夹操作。此外,还讲解了如何使用Python自动化发送电子邮件,涉及SMTP协议和相关库的使用。
摘要由CSDN通过智能技术生成

我们知道,程序运行时,可以用变量来保存运算结果,但如果希望程序运行关闭后,依然可以查看运行后的结果,就需要将数据保存到文件中。简单点,你可以将文件内容理解为一个字符串值,大小可能有几个GB。本节将学习,如何使用python在硬盘上创建、读取和保存文件。

1.1文件处理

1.1.1 文件与文件路径

文件的两个属性:“路径”和“文件名”,路径指明文件在计算机上的位置,文件名是指该位置的文件的名称。比如,我的电脑上,有个名字为Datawhale - 开源发展理论研究.pdf的文件,它的路径在D:\Datawhale。在windows中,路径中的D:\部分是“根文件夹”,Datawhale是文件夹名。注:Windows中文件夹名和文件名不区分大小写的。

在windows上,路径书写是使用倒斜杠'\'作为文件夹之间的分隔符,而在OS X和Linux上,是使用正斜杠'/'作为它们的路径分隔符。通常我们用os.path.join()函数来创建文件名称字符串。

In [ ]:

import os
os.path.join('Datawhale','docu')

Out[ ]:

'Datawhale\\docu'

我们可以看到返回的是('Datawhale\\docu'),有两个斜杠,这是因为有一个斜杠是用来转义的,在OS X或Linux上调用这个函数,这个字符串就会是'Datawhale/docu'

1.1.2 当前工作目录

每个运行在计算机上的程序,都有一个“当前工作目录”。利用os.getcwd()函数,可以取得当前工作路径的 字符串,并可以利用os.chdir()改变它。

In [ ]:

import os
os.getcwd()

Out[ ]:

'd:\\打卡学习\\OfficeAutomation\\source'

In [ ]:

os.chdir('d:\\打卡学习\\OfficeAutomation')
os.getcwd()

Out[ ]:

'd:\\打卡学习\\OfficeAutomation'

In [ ]:

os.chdir('d:\\打卡学习\\OfficeAutomation\\source')

1.1.3 路径操作

1.1.3.1 绝对路径和相对路径

“绝对路径”,总是从根文件夹开始。

“相对路径”,相对于程序的当前工作目录。

相对路径中,单个句点“.”表示当前目录的缩写,两个句点“..”表示父文件夹。

几个常用的绝对路径和相对路径处理函数

os.path.abspath(path):将相对路径转换为绝对路径,将返回参数的绝对路径的字符串。os.path.isabs(path):判断是否是绝对路径,是返回True,不是则返回False

In [ ]:

os.path.abspath('.')  # 'd:\\打卡学习\\OfficeAutomation\\source'
os.path.isabs('.')    # False
os.path.isabs(os.path.abspath('.'))

Out[ ]:

True

1.1.3.2 路径操作

os.path.relpath(path,start):返回从start路径到path的相对路径的字符串。如果没提供start,就使用当前工作目录作为开始路径。

os.path.dirname(path): 返回当前路径的目录名称。

os.path.basename(path):返回当前路径的文件名称。

In [ ]:

os.path.relpath(r'D:\\',os.getcwd())

Out[ ]:

'..\\..\\..'

In [ ]:

path = os.getcwd() # 'd:\\打卡学习\\OfficeAutomation\\source'
# path
os.path.dirname(path) # 'd:\\打卡学习\\OfficeAutomation'

Out[ ]:

'd:\\打卡学习\\OfficeAutomation'

In [ ]:

os.path.basename(os.getcwd()) # 'source'

Out[ ]:

'source'

如果同时需要一个路径的目录名称和基本名称,可以调用os.path.split(),获得者两个字符串的元组。

In [ ]:

caFilePath = 'D:\\Datawhale\\python办公自动化\\python课程画图.pptx'
os.path.split(caFilePath) # ('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')

Out[ ]:

('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')

我们也可以调用os.path.dirname()os.path.basename(),将它们的返回值放在一个元组中,从而得到同样的元组。

In [ ]:

(os.path.dirname(caFilePath),os.path.basename(caFilePath))  #('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')

Out[ ]:

('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')

如果我们想返回每个文件夹的字符串的列表。用os.path.split()无法得到,我们可以用split()字符串方法,并根据os.path.sep 中的字符串进行分割。os.path.sep 变量设置为正确的文件夹分割斜杠。

In [ ]:

os.path.sep  # '\\'
caFilePath.split(os.path.sep)

Out[ ]:

['D:', 'Datawhale', 'python办公自动化', 'python课程画图.pptx']

1.1.3.3 路径有效性检查

如果提供的路径不存在,很多Python函数就会崩溃并报错。os.path模块提供了一些函数,用于检测给定的路径是否存在,以及判定是文件还是文件夹。

os.path.exists(path):如果path参数所指的文件或文件夹存在,则返回True,否则返回False。

os.path.isfile(path):如果path参数存在,并且是一个文件,则返回True,否则返回False。

os.path.isdir(path):如果path参数存在,并且是一个文件夹,则返回True,否则返回False。

In [ ]:

os.path.exists('C:\\windows')

Out[ ]:

True

In [ ]:

os.path.exists('C:\\fasfa')

Out[ ]:

False

In [ ]:

os.path.isfile('D:\打卡学习\OfficeAutomation\Task01 文件自动化与邮件处理.md')

Out[ ]:

True

In [ ]:

os.path.isfile('D:\打卡学习\OfficeAutomation')

Out[ ]:

False

In [ ]:

os.path.isdir('D:\打卡学习\OfficeAutomation\Task01 文件自动化与邮件处理.md')

Out[ ]:

False

In [ ]:

os.path.isdir('D:\打卡学习\OfficeAutomation')

Out[ ]:

True

1.1.4 文件及文件夹操作

1.1.4.1 用os.makedirs()创建新文件夹

注:os.makedirs()可以创建所有必要的中间文件夹。

In [ ]:

import os
os.makedirs('D:\打卡学习\OfficeAutomation\\test_makedir') #查看目录,已创建,若文件夹已存在,不会覆盖,会报错

1.1.4.2 查看文件大小和文件夹内容

我们已经可以处理文件路径,这是操作文件及文件夹的基础。接下来,我们可以搜集特定文件和文件夹的信息。os.path模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。

os.path.getsize(path):返回path参数中文件的字节数。

os.listdir(path):返回文件名字符串的列表,包含path参数中的每个文件。

In [ ]:

os.path.getsize(r'D:\打卡学习\OfficeAutomation\Task01 文件自动化与邮件处理.md')

Out[ ]:

29234

In [ ]:

os.listdir(r'D:\打卡学习\OfficeAutomation')

Out[ ]:

['pdf版本',
 'pdf版本.zip',
 'readme.md',
 'source',
 'Task01 文件自动化与邮件处理.md',
 'Task02 Python与Excel.md',
 'Task03 python与word.md',
 'Task04 python与pdf.md',
 'Task05 爬虫入门与综合应用.md',
 'test.xlsx',
 'test_1.xlsx',
 'test_makedir',
 '图片',
 '用户行为偏好.xlsx']

如果想知道目录下所有文件的总字节数,可以同时使用os.path.getsize()os.listdir()

In [ ]:

total_size = 0
for filename in os.listdir(r'D:\打卡学习\OfficeAutomation'):
    total_size += os.path.getsize(os.path.join(r'D:\打卡学习\OfficeAutomation',filename))
total_size

Out[ ]:

8688544

1.1.5 文件读写过程

读写文件3个步骤:

1.调用open()函数,返回一个File对象。

2.调用File对象的read()write()方法。

3.调用File对象的close()方法,关闭该文件。

1.1.5.1 用open()函数打开文件

要用open()函数打开一个文件,就要向它传递一个字符串路径,表明希望打开的文件。这既可以是绝对路径,也可以是相对路径。open()函数返回一个File对象。 先用TextEdit创建一个文本文件,名为hello.txt。输入Hello World!作为该文本文件的内容,将它保存在你的用户文件夹中。

In [ ]:

helloFile = open(r'D:\打卡学习\OfficeAutomation\test_1.xlsx')
print(helloFile)
helloFile.close()
<_io.TextIOWrapper name='D:\\打卡学习\\OfficeAutomation\\test_1.xlsx' mode='r' encoding='cp936'>

1.1.5.2 读取文件内容

有了File对象,我们就可以开始从它读取内容。

read():读取文件内容。

readlines():按行读取文件中的内容,取得一个字符串列表,列表中每个字符串是文本中的一行且以\n结束。

In [ ]:

helloFile = op
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值