《Python编程快速上手》第八章 读写文件
《Python编程快速上手》第八章 读写文件
Ramsayi8.1 文件与文件路径
在 Windows 中,根文件夹名为 C:\,也称为 C:盘。
在 OS X 和 Linux 中,根文件夹是/。
8.1.1 Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠
如果将单个文件和路径上的文件夹名称的字符串传递给它,os.path.join()
就会返回一个文件路径的字符串,包含正确的路径分隔符。
1 | import os |
如果需要创建文件名称的字符串,os.path.join()
函数就很有用。
1 | 'accounts.txt', 'details.csv', 'invite.docx'] myFiles = [ |
8.1.2 当前工作目录
利用 os.getcwd()
函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()
改变它。
1 | import os |
8.1.3 绝对路径与相对路径
• “绝对路径”,总是从根文件夹开始。
• “相对路径”,它相对于程序的当前工作目录。
单个的句点(.
)用作文件夹目名称时,是“这个目录”的缩写。
两个句点(..
)意思是父文件夹。
8.1.4 用 os.makedirs()创建新文件夹
程序可以用 os.makedirs()
函数创建新文件夹(目录)
1 | import os |
8.1.5 os.path 模块
os.path 模块的完整文档在 Python 网站上:http://docs.python.org/3/library/os.path.html。
8.1.6 处理绝对路径和相对路径
• 调用 os.path.abspath(path)
将返回参数的绝对路径的字符串。这是将相对路径转 换为绝对路径的简便方法。
• 调用 os.path.isabs(path)
,如果参数是一个绝对路径,就返回 True,如果参数是 一个相对路径,就返回 False。
• 调用 os.path.relpath(path, start)
将返回从 start 路径到 path 的相对路径的字符串。 如果没有提供 start,就使用当前工作目录作为开始路径。
1 | '.') os.path.abspath( |
1 | 'C:\\Windows', 'C:\\') os.path.relpath( |
调用 os.path.dirname(path)
将返回一个字符串,它包含 path 参数中最后一个斜杠之前的所有内容。
调用 os.path.basename(path)
将返回一个字符串,它包含 path 参数中最后一个斜杠之后的所有内容。
1 | 'C:\\Windows\\System32\\calc.exe' path = |
同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split()
,获 得这两个字符串的元组
1 | 'C:\\Windows\\System32\\calc.exe' calcFilePath = |
调用 os.path.dirname()
和 os.path.basename()
,将它们的返回值放在 一个元组中,从而得到同样的元组。
1 | (os.path.dirname(calcFilePath), os.path.basename(calcFilePath)) |
返回每个文件夹的字符串的列表, 使用 split()
字符串方法, 并根据 os.path.sep
中的字符串进行分割
1 | calcFilePath.split(os.path.sep) |
8.1.7 查看文件大小和文件夹内容
• 调用 os.path.getsize(path)
将返回 path 参数中文件的字节数。
• 调用 os.listdir(path)
将返回文件名字符串的列表,包含 path 参数中的每个文件
1 | 'C:\\Windows\\System32\\calc.exe') os.path.getsize( |
如果想知道这个目录下所有文件的总字节数,就可以同时使用 os.path.getsize()
和 os.listdir()
。
1 | 0 totalSize = |
8.1.8 检查路径有效性
• 如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path)将返回 True,否则返回 False。
• 如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path)将返回 True,否则返回 False。
• 如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path)将返回 True,否则返回 False。
1 | 'C:\\Windows') os.path.exists( |
利用 os.path.exists()
函数,可以确定 DVD 或闪存盘当前是否连在计算机上。
1 | 'D:\\') os.path.exists( |
8.2 文件读写过程
在 Python 中,读写文件有 3 个步骤:
1.调用 open()
函数,返回一个 File 对象。
2.调用 File 对象的 read()
或 write()
方法。
3.调用 File 对象的 close()
方法,关闭该文件。
8.2.1 用 open()函数打开文件
open()
函数返回一个 File 对象。
1 | open('C:\\Users\\your_home_folder\\hello.txt') helloFile = |
如果你不希望依赖于 Python 的默认值,也可以明确指明该模式,向 open()传入字符串’r’,作为第二个参数。所以 open(‘/Users/asweigart/hello.txt’, ‘r’)和 open(‘/Users/asweigart/hello.txt’)做的事情一样。
8.2.2 读取文件内容
将整个文件的内容读取为一个字符串值,就使用 File 对象的 read()
方法。
1 | helloContent = helloFile.read() |
使用 readlines()
方法,从该文件取得一个字符串的列表。列表中的 每个字符串就是文本中的每一行。
1 | When, in disgrace with fortune and men's eyes, |
1 | open('sonnet29.txt') sonnetFile = |
8.2.3 写入文件
将'w'
作为第二个参数传递给 open()
,以写模式打开该文件。写模式覆写原有文件
将'a'
作为第二个参数传递给 open()
,以添加模式打开该文件。添加模式在末尾添加文本
在读取或写入文件后,调用 close()
方法,然后才能再次打开该文件。
1 | open('bacon.txt', 'w') baconFile = |
write()
方法不会像 print()
函数那样,在字符串的末尾自动添加换行字符。必须自己添加该字符。
8.3 用 shelve 模块保存变量
1 | import shelve |
shelf 值不必用读模式或写模式打开,因为它们在打开后,既能读又能写。
1 | open('mydata') shelfFile = shelve. |
这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传递给 list()函数,取得列表的形式。
1 | open('mydata') shelfFile = shelve. |
8.4 用 pprint.pformat()函数保存变量
pprint.pformat()函数将将列表或字典中的内容返回为字符串类型
1 | import pprint |
1 | import myCats |