上手—2.自动化任务之读写文件"/>
Python编程快速上手—2.自动化任务之读写文件
目录
- 2. 读写文件
- 2.1 文件与文件路径
- 2.1.1 当前工作目录
- 2.1.2 绝对路径与相对路径
- 2.1.3 用os.makedirs()创建新文件夹
- 2.1.4 os.path 模块
- 2.1.5 处理绝对路径和相对路径
- 2.1.6 查看文件大小和文件夹内容
- 2.1.7 检查路径有效性
- 2.2 文件读写过程
- 2.2.1 用 open()函数打开文件
- 2.2.2 读取文件内容
- 2.2.3 写入文件
- 2.3 用 shelve 模块保存变量
- 2.4 用 pprint.pformat()函数保存变量
2. 读写文件
2.1 文件与文件路径
在 Windows 上,路径书写使用倒斜杠作为文件夹之间的分隔符。
在 OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。
如果需要创建文件名称的字符串,os.path.join()函数就很有用。这些字符串将传
递给几个文件相关的函数。
>>> myFiles = ['accounts.txt', 'details.csv', 'invite.docx']
>>> for filename in myFiles:
print(os.path.join('C:\\Users\\asweigart', filename))
C:\Users\asweigart\accounts.txt
C:\Users\asweigart\details.csv
C:\Users\asweigart\invite.docx
2.1.1 当前工作目录
每个运行在计算机上的程序,都有一个“当前工作目录”,或 cwd。
利用 os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()改变它。
>>> import os
>>> os.getcwd()
'C:\\Python34'
>>> os.chdir('C:\\Windows\\System32')
>>> os.getcwd()
'C:\\Windows\\System32'
如果要更改的当前工作目录不存在,Python 就会显示一个错误。
2.1.2 绝对路径与相对路径
有两种方法指定一个文件路径。
- “绝对路径”,总是从根文件夹开始。
- “相对路径”,它相对于程序的当前工作目录。
单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。
相对路径开始处的.\是可选的。例如,.\spam.txt 和 spam.txt 指的是同一个文件。
2.1.3 用os.makedirs()创建新文件夹
>>> import os
>>> os.makedirs('C:\\delicious\\walnut\\waffles')
这不仅将创建 C:\delicious 文件夹,也会在 C:\delicious 下创建 walnut 文件夹,
并在 C:\delicious\walnut 中创建 waffles 文件夹。目的是确保完整路径名存在。
2.1.4 os.path 模块
os.path 模块包含了许多与文件名和文件路径相关的有用函数。
例如:os.path.join()来构建所有操作系统上都有效的路径。
2.1.5 处理绝对路径和相对路径
os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的
路径是否为绝对路径。
- os.path.isabs(path) 是绝对路径,就返回 True
- os.path.abspath(path) 将相对路径转换为绝对路径
- os.path.relpath(path, start) 返回从 start 路径到 path 的相对路径的字符串
基本名称跟在路径中最后一个斜杠后,它和文件名一样,目录名称是最后一个斜杠之前的所有内容
- os.path.dirname(path) 返回目录名称
- os.path.basename(path) 返回基本名称
>>> path = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.basename(path)
'calc.exe'
>>> os.path.dirname(path)
'C:\\Windows\\System32'
如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split(),获
得这两个字符串的元组
>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.split(calcFilePath)
('C:\\Windows\\System32', 'calc.exe')
2.1.6 查看文件大小和文件夹内容
os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。
- 调用 os.path.getsize(path)将返回 path 参数中文件的字节数。
- 调用 os.listdir(path)将返回文件名字符串的列表,包含 path 参数中的每个文件
如果想知道这个目录下所有文件的总字节数,就可以同时使用 os.path.getsize()和 os.listdir()。
>>> totalSize = 0
>>> for filename in os.listdir('C:\\Windows\\System32'):
totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32', filename))
>>> print(totalSize)
1117846456
2.1.7 检查路径有效性
- os.path.exists(path) path参数所指的文件或文件夹存在,将返回 True
- os.path.isfile(path) path 参数存在,并且是一个文件,将返回 True
- os.path.isdir(path) path 参数存在,并且是一个文件夹,将返回 True
2.2 文件读写过程
- “纯文本文件”只包含基本文本字符,不包含字体、大小和颜色信息。带有 .txt扩展名的文本文件以及带有.py 扩展名的Python脚本文件,都是纯文本文件的例子。
- “二进制文件”是所有其他文件类型,诸如字处理文档、PDF、图像、电子表格
和可执行程序。
在 Python 中,读写文件有 3 个步骤:
- 调用 open()函数,返回一个 File 对象。
- 调用 File 对象的 read()或 write()方法。
- 调用 File 对象的 close()方法,关闭该文件。
2.2.1 用 open()函数打开文件
open(path)函数返回一个 File 对象。
path既可以是绝对路径,也可以是相对路径。
>>> helloFile = open('C:\\Users\\your_home_folder\\hello.txt')
读模式是默认的模式。
File 对象代表计算机中的一个文件,它只是Python中另一种类型的值,就像你已熟悉的列表和字典。
2.2.2 读取文件内容
有了一个 File 对象,就可以开始从它读取内容。
- read()方法将文件的内容看成是单个大字符串
- readlines()方法从文件取得一个字符串的列表。列表中的每个字符串就是文本中的每一行。
与单个大字符串相比,字符串的列表通常更容易处理。
2.2.3 写入文件
需要以“写入纯文本模式”或“添加纯文本模式”打开该文件,或简称为“写模式”和“添加模式”。
write():将字符串写入文件,并返回写入的字符个数,包括换行符。然后用close()关闭该文件。
- 写模式:(将’w’作为第二个参数传递给 open())将覆写原有的文件,从头开始
- 添加模式:(将’a’作为第二个参数传递给 open())将在已有文件的末尾添加文本。
如果传递给 open()的文件名不存在,写模式和添加模式都会创建一个新的空文
件。在读取或写入文件后,调用 close()方法,然后才能再次打开该文件。
2.3 用 shelve 模块保存变量
将 Python 程序中的变量保存到二进制的 shelf 文件中
import shelveshelfFile = shelve.open('mydata')
cats = ['Zophie', 'Pooka', 'Simon']
shelfFile['cats'] = cats
shelfFile.close()
shelfFile = shelve.open('mydata')
print(shelfFile['cats'])
shelfFile.close()
shelf 值不必用读模式或写模式打开,因为它们在打开后,既能读又能写。
就像字典一样,shelf值有keys()和values()方法,返回shelf中键和值的类似列表的值。
所以应该将它们传递给 list()函数,取得列表的形式。
创建文件时,如果你需要在 Notepad 或 TextEdit 这样的文本编辑器中读取它们,
纯文本就非常有用。但是,如果想要保存 Python 程序中的数据,那就使用 shelve 模块。
2.4 用 pprint.pformat()函数保存变量
假定你有一个字典,保存在一个变量中,你希望保存这个变量和它的内容,以便将来使用。pprint.pformat()函数将提供一个字符串,你可以将它写入.py文件。该文件将成为你自己的模块,如果你需要使用存储在其中的变量,就可以导入它。
创建自定义数据模块myCats
>>> import pprint
>>> cats = [{'name': 'Zophie', 'desc': 'chubby'}, {'name': 'Pooka', 'desc': 'fluffy'}]
>>> pprint.pformat(cats)
"[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"
>>> fileObj = open('myCats.py', 'w')
>>> fileObj.write('cats = ' + pprint.pformat(cats) + '\n')
83
>>> fileObj.close()
使用自定义模块myCats
>>> import myCats
>>> myCats.cats
[{'name': 'Zophie', 'desc': 'chubby'}, {'name': 'Pooka', 'desc': 'fluffy'}]
>>> myCats.cats[0]
{'name': 'Zophie', 'desc': 'chubby'}
>>> myCats.cats[0]['name']
'Zophie'
只有基本数据类型,诸如整型、浮点型、字符串、列表和字典,可以作为简单文本写入一个文件。例如,File 对象就不能够编码为文本。
更多推荐
Python编程快速上手—2.自动化任务之读写文件
发布评论