文件与文件路径
读写文件
用shelve模块保存变量
1 python 读写文件
1.1 文件与文件路径
windows下,
import os
os.path.join('usr', 'bin', 'spam')
usr\\bin\\spam
linux下,
import os
os.path.join('usr', 'bin', 'spam')
usr/bin/spam
1.2 当前工作目录
每个运行在计算机上的程序,都有一个“当前工作目录”,或cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用os.getcwd()函数可以取得当前工作路径的字符串,并可以利用os.chdir()改变它。
>>>import os
>>>os.getcwd()
'c:\\python34'
>>os.chdir('c:\\windows\\system32')
>>>os.getcwd()
'c:\\windows \\system32'
1.3 绝对路径和相对路径
有两种方法指定一个文件路径
绝对路径,它总是从根目录开始。
相对路径,它相对于程序的当前工作目录。
1.4 用os.makedirs()创建新文件夹
程序可以用 os.makedirs()创建新文件夹(目录)。在交互式环境中输入以下代码:
>>>import os
>>>os.makedirs('c:\\delicious\\walnut\\waffles')
这里创建了所有必要的中间文件夹。
1.5 os.path模块
os.path模块包含了许多与文件名和文件路径相关的有用函数。在1.1中已经使用了os.path来构建
所有操作系统上都有效的路径。
1.5 处理绝对路径和相对路径
os.path模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。
调用os.path.abspath(path)将返回参数的绝对路径的字符串,这是将相对路径转换为绝对路径的简便方法。
调用os.path.isabs(path),如果参数是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。
在交互式环境下尝试以下函数
>>>os.path.abspath('.')
'c:\\Python34'
>>os.path.abspath('.\\Script')
'c:\\Python34\\Script'
>>os.path.isabs('.')
False
>>>os.path.isabs(os.path.abspath('.'))
True
2 文件读写过程
在Python中,读写文件有3个步骤:
1,调用open()函数,返回一个File对象。
2,调用File对象的read()或write()方法。
3,调用File对象的close()方法,关闭该文件。
2.1 用open()函数打开文件
要用open()函数打开一个文件,就要向它传递一个字符串路径,表明希望打开的文件。这既可以是绝对
路径,也可以是相对路径。open()函数返回 一个File()的对象。
2.2 读取文件内容
既然有了一个File()的对象,就可以开始从它读取内容。如果你希望将整个文件的内容读取为一个字符串值,就使用File()对象r read()方法。
>>>helloContent = helloFile.read()
>>>helloContent
'Hello world'
或者,可以使用readlines()方法,从该文件中取得一个字符串的列表。列表中的每一个字符串就是文本中的每一行。
2.3 写入文件
打开文件时如果用读模式,则不能写入文件。你需要以“写入纯文本模式”或“添加纯文本模式”打开该文件,或简称为“写模式”或“添加模式”。
写模式将覆盖原有的文件。添加模式则是在已有的文件末尾添加文本。如果传递给open()文件名不存在,写模式和覆盖模式则都会创建一个新的空文件。在读取或写入文件后,调用close()方法,然后才能再次打开该文件。
下面是代码示例。
>>>baconFile = open('bacon.txt', 'w') # 'w'表示的是写模式
>>>baconFile.write('Hello world!\n')
13
>>>baconFile.close()
>>>baconFile = open('bacon.txt', 'a') # 'a'表示的是添加模式
>>>baconFile.write('Bacon is not a vegetable.')
25
>>>baconFile.close()
>>>baconFile.open('bacon.txt')
>>>content = open('bacon.txt')
>>>baconFile.close()
>>>print(content)
Hello world!
Bacon is not a vegetable.
注意,write() 方法不会像print()函数那样,在字符串的末尾自动添加换行字符,必须自己添加该字符。