您的位置:首页 > 编程语言 > Python开发

《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第8章 读写文件】

2018-03-07 09:54 1001 查看
在程序运行时,可以使用变量保存数据。但是程序关闭后,则所有的数据就都丢失了。如果希望程序结束后,数据仍然保持,则可以将数据保存在文件中。

1.  文件与文件路径

文件有两个关键属性:“文件名”和“路径”。路径指明了文件在计算机上的位置。而文件的“扩展名”之处文件的类型,如Hello.py表明这是一个python文件。虽然文件夹名称和文件名在Windows 和 OS X 上是不区分大小写的,但在 Linux 上是区分大小写的。

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)  当前工作目录

每个运行在计算机上的程序,都有一个“当前工作目录”,或 cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()改变它。示例:>>> import os

>>> os.getcwd()

'C:\\Python34'

>>> os.chdir('C:\\Windows\\System32')

>>> os.getcwd()

'C:\\Windows\\System32'如果更改的当前目录不存在,Python会报FileNotFoundError错误。

3)  绝对路径与相对路径

• “绝对路径”,总是从根文件夹开始。
• “相对路径”,它相对于程序的当前工作目录。
还有点(.)和点点(..)文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”(当前目录)的缩写。两个句点(“点点”)意思是父文件夹。示例:



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

可以用 os.makedirs()函数递归创建创建新文件夹(目录)。示例:>>> import os

>>>os.makedirs('C:\\delicious\\walnut\\waffles')如果目录已经创建,那么会返回一个FileExistsError。
5)  处理绝对路径和相对路径
调用 os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。
• 调用os.path.isabs(path),如果参数是一个绝对路径,就返回 True,如果参数是
一个相对路径,就返回 False。
• 调用os.path.relpath(path, start)将返回从 start 路径到 path 的相对路径的字符串。
如果没有提供 start,就使用当前工作目录作为开始路径。示例:>>> os.path.abspath('.')

'C:\\Python34'

>>> os.path.abspath('.\\Scripts')

'C:\\Python34\\Scripts'

>>> os.path.isabs('.')

False

>>>os.path.isabs(os.path.abspath('.'))

True

>>> os.path.relpath('C:\\Windows','C:\\spam\\eggs')

'..\\..\\Windows'调用 os.path.dirname(path)将返回一个字符串,它包含 path 参数中最后一个斜杠之前的所有内容。调用 os.path.basename(path)将返回一个字符串,它包含 path 参数中最后一个斜杠之后的所有内容。



如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split(),获得这两个字符串的元组。示例:>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'

>>> os.path.split(calcFilePath)

('C:\\Windows\\System32', 'calc.exe')

6)  查看文件大小和文件夹内容

• 调用 os.path.getsize(path)将返回 path 参数中文件的字节数。
• 调用 os.listdir(path)将返回文件名字符串的列表,包含 path 参数中的每个文件(请注意,这个函数在 os 模块中,而不是 os.path)。>>>os.path.getsize('C:\\Windows\\System32\\calc.exe')

776192

>>>os.listdir('C:\\Windows\\System32')

['0409', '12520437.cpx', '12520850.cpx','5U877.ax', 'aaclient.dll',

--snip--

'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN','zh-HK', 'zh-TW', 'zipfldr.dll']

7)  检查路径有效性

• 如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path)将返回 True,
否则返回 False。
• 如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path)将返回 True,否
则返回 False。
• 如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path)将返回 True,
否则返回 False。示例:>>> os.path.exists('C:\\Windows')

True

>>> os.path.exists('C:\\some_made_up_folder')

False

2.  文件读写过程

在 Python 中,读写文件有 3 个步骤:
1.调用 open()函数,返回一个 File 对象。
2.调用 File 对象的 read()或 write()方法。
3.调用 File 对象的 close()方法,关闭该文件。

1)  用 open()函数打开文件

open()函数返回一个File对象,File对象代表计算机中的一个值,它只是Python中另一种类型值。如果没有指明打开模式,python模式默认是读模式。示例:
      >>>helloFile = open('C:\\Users\\your_home_folder\\hello.txt')

2)  读取文件内容

使用 File 对象的 read()方法,可以将整个文件内容读取为一个字符串值。使用File对象的readlines()方法,返回一个字符串列表。示例:>>> sonnetFile = open('sonnet29.txt')

>>> sonnetFile.readlines()

[When, in disgrace with fortune and men's eyes,\n', ' I all alonebeweep my

outcast state,\n', And trouble deaf heaven with my bootlesscries,\n', And

look upon myself and curse my fate,']

3)  写入文件

写入文件可以使用”写模式”(‘w’)和”添加模式”(‘a’)。“写模式”会覆盖原文件所有内容,“添加模式”将会在已有文件的末尾添加文本。示例:>>> baconFile = open('bacon.txt', 'w')

>>> baconFile.write('Hello world!\n')

13

>>> baconFile.close()

>>> baconFile = open('bacon.txt', 'a')

>>> baconFile.write('Bacon is not a vegetable.')

25

>>> baconFile.close()

>>> baconFile = open('bacon.txt')

>>> content = baconFile.read()

>>> baconFile.close()

>>> print(content)

Hello world!

Bacon is not a vegetable.请注意:
a)     write()方法不会像 print()函数那样,在字符串的末尾自动添加换行字符。如果要加,必须自己添加该字符。
b)     如果传递给open()的文件名不存在,写模式和添加模式都会创建一个新的空文件。

3.  用 shelve 模块保存变量

使用shelve模块,可以将Python程序中的变量保存到二进制的shelf文件中。这样,程序就可以从硬盘中恢复变量的数据。shelve 模块让你在程序中添加“保存”和“打开”功能。示例:>>> import shelve

>>> shelfFile =shelve.open('mydata')

>>> cats = ['Zophie', 'Pooka','Simon']

>>> shelfFile['cats'] = cats

>>> shelfFile.close()

4.  用 pprint.pformat()函数保存变量

pprint.pprint()函数将列表或字典中的内容“漂亮打印”到屏幕,而 pprint.pformat()函数将返回同样的文本字符串,但不是打印它。示例:>>> 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()注:只有基本数据类型,诸如整型、浮点型、字符串、列表和字典,可以作为简单文本写入一个文件。例如,File 对象就不能够编码为文本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 读写文件
相关文章推荐