在 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
每个运行在计算机上的程序,都有一个“当前工作目录”,或 cwd。
利用 os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()改变它。
>>> import os
>>> os.getcwd()
'C:\\Python34'
>>> os.chdir('C:\\Windows\\System32')
>>> os.getcwd()
'C:\\Windows\\System32'
如果要更改的当前工作目录不存在,Python 就会显示一个错误。
有两种方法指定一个文件路径。
单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。两个句点(“点点”)意思是父文件夹。
相对路径开始处的.\是可选的。例如,.\spam.txt 和 spam.txt 指的是同一个文件。
>>> import os
>>> os.makedirs('C:\\delicious\\walnut\\waffles')
这不仅将创建 C:\delicious 文件夹,也会在 C:\delicious 下创建 walnut 文件夹,
并在 C:\delicious\walnut 中创建 waffles 文件夹。目的是确保完整路径名存在。
os.path 模块包含了许多与文件名和文件路径相关的有用函数。
例如:os.path.join()来构建所有操作系统上都有效的路径。
os.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')
os.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
在 Python 中,读写文件有 3 个步骤:
open(path)函数返回一个 File 对象。
path既可以是绝对路径,也可以是相对路径。
>>> helloFile = open('C:\\Users\\your_home_folder\\hello.txt')
读模式是默认的模式。
File 对象代表计算机中的一个文件,它只是Python中另一种类型的值,就像你已熟悉的列表和字典。
有了一个 File 对象,就可以开始从它读取内容。
与单个大字符串相比,字符串的列表通常更容易处理。
需要以“写入纯文本模式”或“添加纯文本模式”打开该文件,或简称为“写模式”和“添加模式”。
write():将字符串写入文件,并返回写入的字符个数,包括换行符。然后用close()关闭该文件。
如果传递给 open()的文件名不存在,写模式和添加模式都会创建一个新的空文
件。在读取或写入文件后,调用 close()方法,然后才能再次打开该文件。
将 Python 程序中的变量保存到二进制的 shelf 文件中
import shelve
shelfFile = 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 模块。
假定你有一个字典,保存在一个变量中,你希望保存这个变量和它的内容,以便将来使用。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 对象就不能够编码为文本。