现在的位置: 首页 > 综合 > 正文

使用临时文件

2018年04月30日 ⁄ 综合 ⁄ 共 1533字 ⁄ 字号 评论关闭
 如果你曾经写过shell 脚本,并且用中间文件来存放处理的中间结果,你很可能被
目录里的垃圾困扰。你以20 个log_001.txt,log_002.txt 等开始,而你想要的只是
名为log_sum.txt 的最终文件,而且你机器里塞满了一系列的log_001.tmp,
log_001.tmp2等临时文件,至少我们的生活是这样的。为了保持你的目录的秩序,
用完临时文件就要立即清除掉。
为了帮助解决临时文件的管理问题,Python 提供了一个不错的小模块tempfile,
它发布了两个函数:mktemp()和TemporaryFile()。前者返回你机器的临时文件
目录(如Unix 里的/tmp 和Windows 的c:/tmp)中未使用的文件名, 后者直接返
回一个文件对象。例如:
# 读输入文件
inputFile = open('nput.txt', 'r')
import tempfile
# 创建临时文件
tempFile = tempfile.TemporaryFile() # 我们甚至不需要知道文件名
first_process(input = inputFile, output = tempFile)
用Python 完成常见的任务289
# 创建输出文件
outputFile = open('output.txt', 'w')
second_process(input = tempFile, output = outputFile)
当需要立即操作文件对象时使用tempfile.TemporaryFile()很合适。它的一个
好处是当删除它时它会自动删除对应的文件,保持磁盘的干净。临时文件的一个
重要用法是用于os.system调用,而这需要文件名而不是文件对象。让我们看一
个例子程序,它创建信件并邮寄给一组邮件地址(只用于Unix):
formletter = """Dear %s,/nI'm writing to you to suggest that ...""" # 等等
myDatabase = [('Bill Clinton', 'bill@whitehouse.gov.us'),
('Bill Gates', 'bill@microsoft.com'),
('Bob', 'bob@subgenius.org')]
for name, email in myDatabase:
specificLetter = formletter % name
tempfilename = tempfile.mktemp()
tempfile = open(tempfilename, 'w'
tempfile.write(specificLetter)
tempfile.close()
os.system('/usr/bin/mail %(email)s -s "Urgent!"< %(tempfilename)s' % vars())
os.remove(tempfilename)
for循环的第一行返回一个基于给定名字定制的信件,然后把它写入一个临时文
件,并准备用os.system调用把文件邮寄给合适的邮件地址,最后清除掉临时文
件。如果你忘记了% 的用法,请回到第二章去复习它,它是值得学习的。vars()
函数是一个内置函数,它返回对应于局部名字空间的变量的字典,字典的关键字
是变量名,字典的值是变量的值。vars()非常适合于探索名字空间,也可以用一
个对象为参数调用它(如一个模块,一个类或者一个实例),而它将返回该对象的
名字空间。另外两个内置函数locals()和globals()函数分别返回局部和全局
名字空间。在这三种情况下,修改返回的字典不保证对相应的名字空间有效,所
以最好把它们看作只读的。例子中vars()函数创建了一个字典,并用于修改字
符串,在字符串中的%(⋯)s 部分的名字必须与程序里的变量名匹配

抱歉!评论已关闭.