一、文件与文件路径
V 这是一个V
\ 这是反斜杠
/ 这是斜杠
Windows根目录:C:\ linux和OS X 路径:/
1、windows上的反斜杠以及OS X 和 Linux上的正斜杠
os.path.join()方法:返回文件路径,但是我们可以用它来批量生成文件路径名。
2、当前工作目录
os.getcwd():获取当前工作目录
os.chdir():改变当前工作路径
但是如果更改的路径不存在的话,就会报错。
3、绝对路径和相对路径
绝对路径:从根文件夹开始
相对路径:从当前工作目录开始
我们使用命令查看一些目录的时候,会发现存在. 和 ..文件夹。他们不是真正的文件夹,只是可以在路径中使用的特殊名称。
. 代表 这个文件夹
.. 代表 父文件夹
4、用os.makedirs()创建新文件夹
5、os.path模块
os.path模块是os模块中的模块。包含许多和文件名、文件路径相关的方法。
6、处理绝对路径和相对路径
os.path.abspath(path):返回参数的绝对路径。
os.path.isabs(path):判断参数是否是绝对路径。
os.path.relpath(path, start):返回从 start 路径到 path 的相对路径的字符串
os.path.dirname(path):返回参数目录名称。
os.path.basename(path):返回参数基本名称。
os.path.split():同时获取一个路径的目录名称和基本名称,以元组的形式放回。
相当于(os.path.dirname(calcFilePath), os.path.basename(calcFilePath))
如果想要获取列表返回值,可以用以下方法:
calcFilePath.split(os.path.sep)
['C:', 'Windows', 'System32', 'calc.exe']
'/usr/bin'.split(os.path.sep)
['', 'usr', 'bin']
根据程序运行的计算机,os.path.sep 变量设置为正确的文件夹分割斜杠
7、查看文件大小和文件夹内容
os.path.getsize(path) 将返回 path 参数中文件的字节数。
os.listdir(path)将返回文件名字符串的列表,包含 path 参数中的每个文件
这两个函数结合起来,可以统计到这个文件夹内所有文件合起来的大小。
import os
totalSize = 0
for filename in os.listdir('C:\\Windows\\System32'):
totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32', filename))
print(totalSize)
8、检查路径有效性
如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path) 将返回 True , 否则返回False 。
如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path) 将返回 True ,否
则返回 False 。
如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path) 将返回 True ,
否则返回 False 。
二、文件读写过程
“纯文本文件”只包含基本文本字符,不包含字体、大小和颜色信息。
“二进制文件”是所有其他文件类型,诸如字处理文档、 PDF 、图像、电子表格和可执行程序。如果用 记事本 或 TextEdit 打开一个二进制文件,它看起来就像乱码
Python 中,读写文件有 3 个步骤:
1 .调用 open() 函数,返回一个 File 对象。
2 .调用 File 对象的 read() 或 write() 方法。
3 .调用 File 对象的 close() 方法,关闭该文件。
1、用 open()函数打开文件
>>> helloFile = open('C:\\Users\\ your_home_folder \\hello.txt')
1、默认以只读模式打开
2、调用open()方法将返回一个file对象
2、读取文件内容
File对象的read()方法会将整个文件内容当做一个大字符串,它会返回这个字符串。
readlines() 方法会返回一个列表,列表中的每一项就是文本中的每一行。
请注意,每个字符串值都以一个换行字符\n 结束。除了文件的最后一行。与单 个大字符串相比,字符串的列表通常更容易处理
3、写入文件
>>> baconFile = open('bacon.txt', 'w')
w:写模式,覆写原来的文件。
a:添加模式,在已有文件的末尾添加文件。(之前爬取小说的时候,使用的是w,一直只有第一章,原来如此呀)
如果传递给 open() 的文件名不存在,写模式和添加模式都会创建一个新的空文件。在读取或写入文件后,调用 close() 方法,然后才能再次打开该文件。
三、用shelve模块保存变量
1、利用shelve模块保存数据
利用 shelve 模块,你可以将 Python 程序中的变量保存到二进制的 shelf 文件中。 这样,程序就可以从硬盘中恢复变量的数据。shelve 模块让你在程序中添加“保存” 和“打开”功能。
import shelve
shelfFile=shelve.open('mydata')
cats=['zophie','pooka','simon']
shelfFile['cats']=cats
shelfFile.close()
上述代码运行后会在本地目录创建三个文件,这些二进制文件包含了存储在shelf中的数据。
2、利用shelve模块读取数据,可读可写。
import shelve
shelfFile=shelve.open('mydata')
print(type(shelfFile))
print(shelfFile['cats'])
shelfFile.close()
shelf 值有 keys()和 values()方法,返回 shelf 中键和值的类似列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传 递给 list()函数,取得列表的形式。在交互式环境中输入以下代码:
import shelve
shelfFile=shelve.open('mydata')
print(list(shelfFile.keys()))
print(list(shelfFile.values()))
用 pprint.pformat()函数保存变量
pprint.pprint() 函数将列表或字典中的内容“漂 亮打印”到屏幕,而 pprint.pformat() 函数将返回同样的文本字符串,但不是打印它。 这个字符串不仅是易于阅读的格式,同时也是语法上正确的 Python 代码。假定你有 一个字典,保存在一个变量中,你希望保存这个变量和它的内容,以便将来使用。 pprint.pformat()函数将提供一个字符串,你可以将它写入 .py 文件。该文件将成为你自
己的模块,如果你需要使用存储在其中的变量,就可以导入它。
import pprint
cats = [{'name': 'Zophie', 'desc': 'chubby'}, {'name': 'Pooka', 'desc': 'fluffy'}]
pprint.pformat(cats)
print(pprint.pformat(cats))
fileObj = open('myCats.py', 'w')
fileObj.write('cats = ' + pprint.pformat(cats) + '\n')
print(fileObj.write('cats = ' + pprint.pformat(cats) + '\n'))
fileObj.close()
我们导入了 pprint,以便能使用 pprint.pformat()。我们有一个字典的列表, 保存在变量 cats 中。为了让 cats 中的列表在关闭交互式环境后仍然可用,我们利用 pprint.pformat(),将它返回为一个字符串。当我们有了 cats 中数据的字符串形式, 就很容易将该字符串写入一个文件,我们将它命名为 myCats.py。
import myCats
print(myCats.cats)
print(myCats.cats[0])
print(myCats.cats[0]['name'])