Python之第八章 读写文件

一、文件与文件路径

V 这是一个V

\ 这是反斜杠

/  这是斜杠

Windows根目录:C:\     linux和OS X 路径:/

1、windows上的反斜杠以及OS X 和 Linux上的正斜杠

Python之第八章 读写文件_第1张图片

 os.path.join()方法:返回文件路径,但是我们可以用它来批量生成文件路径名。

Python之第八章 读写文件_第2张图片2、当前工作目录 

os.getcwd():获取当前工作目录

os.chdir():改变当前工作路径

Python之第八章 读写文件_第3张图片

 但是如果更改的路径不存在的话,就会报错。

Python之第八章 读写文件_第4张图片

3、绝对路径和相对路径 

绝对路径:从根文件夹开始

相对路径:从当前工作目录开始

我们使用命令查看一些目录的时候,会发现存在. 和 ..文件夹。他们不是真正的文件夹,只是可以在路径中使用的特殊名称。

Python之第八章 读写文件_第5张图片

. 代表 这个文件夹

.. 代表 父文件夹 

Python之第八章 读写文件_第6张图片

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

Python之第八章 读写文件_第7张图片

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):返回参数基本名称。

Python之第八章 读写文件_第8张图片

 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 参数中文件的字节数。

Python之第八章 读写文件_第9张图片

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

Python之第八章 读写文件_第10张图片

 这两个函数结合起来,可以统计到这个文件夹内所有文件合起来的大小。

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)

Python之第八章 读写文件_第11张图片

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、读取文件内容

Python之第八章 读写文件_第12张图片

 File对象的read()方法会将整个文件内容当做一个大字符串,它会返回这个字符串。

readlines() 方法会返回一个列表,列表中的每一项就是文本中的每一行。

Python之第八章 读写文件_第13张图片

 请注意,每个字符串值都以一个换行字符\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()

Python之第八章 读写文件_第14张图片

 shelf 值有 keys()values()方法,返回 shelf 中键和值的类似列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传 递给 list()函数,取得列表的形式。在交互式环境中输入以下代码:

import shelve

shelfFile=shelve.open('mydata')
print(list(shelfFile.keys()))
print(list(shelfFile.values()))

Python之第八章 读写文件_第15张图片

 四、用 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()

Python之第八章 读写文件_第16张图片

 我们导入了 pprint,以便能使用 pprint.pformat()。我们有一个字典的列表, 保存在变量 cats 中。为了让 cats 中的列表在关闭交互式环境后仍然可用,我们利用 pprint.pformat(),将它返回为一个字符串。当我们有了 cats 中数据的字符串形式, 就很容易将该字符串写入一个文件,我们将它命名为 myCats.py

import myCats
print(myCats.cats)
print(myCats.cats[0])
print(myCats.cats[0]['name'])

Python之第八章 读写文件_第17张图片

你可能感兴趣的:(python,python)