1.获得文件的目录和文件名
问题------给定一个形如"filepath = '/usr/local/pop.ini'"的文件路径,分离出它的目录名和文件名
方法一:
- os.path.dirname()函数获取文件的目录
- os.path.basename()函数获取文件名
#coding=utf-8
import os
filepath = '/usr/local/pop.ini'
"""获取文件目录"""
filedir = os.path.dirname(filepath)
Out[18]: '/usr/local'
"""获取文件名"""
filename = os.path.basename(filepath)
Out[19]: 'pop.ini'
方法二:
- os.path.split()函数将一个路径分离成目录名和文件名
#coding=utf-8
import os
os.path.split('/usr/local/pop.ini')
Out[20]: ('/usr/local', 'pop.ini')
"""
os.path.split()函数有两个返回值,第一个为目录,第二个为文件名。
若输入的是一个目录,则其返回的文件名项为空
"""
os.path.spliit('/usr/local/')
Out[22]: ('usr/local', '')
总结,方法一和方法二虽然可以达到同样的效果。但是某些情况下,可能只需要目录或者只需要文件名,则不必使用方法二中的split。
2.获取文件的后缀
问题------给定一个形如"logname=my.log'"或者"imgname=lena.jpeg"的文件路径,分离成文件的后缀。
如果我们知道文件的后缀长度,可以用切片的方式获取,如
logname="my.log"
imgname='lena.jpeg"
logpostfix = logname[-3:]
imgpostfix = imgname[-4:]
但是这样写很不优雅,而且在不知道后缀长度的情况下很难获得正确的后缀。好在Python提供了获取获取文件后缀的函数
os.path.splitext()。该函数以小数点为界限,将字符串分为前后两个部分。
举个例子:
import os
logname="my.log"
imgname="lena.jpeg"
os.path.splitext(logname)
Out[27]: ('my', '.log')
os.path.splitext(imgname)
Out[30]: ('lena', '.jpeg')
3.打印输出至文件
在print()函数中指定file关键字,如下:
with open('test.txt', 'wt') as f:
print('Hello World!', file=f)
"""
顺便说一下print()函数
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
输出了可以通过file指定输出对象外,print还可以通过sep指定每个对象间的分隔符
record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
print(record,sep=',')
('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
print还可以通过end指定新一行的分隔符
"""
4.确保文件不存在时才能写入
作为一个新手,写入文件时经常不小心覆盖原有的文件。熟悉之后我们经常写出下面的代码来避免覆盖原有文件:
import os
if os.path.exists('somefile'):
print('File already exists!')
else:
with open('somefile', 'wt') as f:
f.write('Hello\n')
但是python3提供了新的便捷方法替代了上面的复杂写法:
在 open()
函数中使用 x
模式来代替 w
模式的方法来解决这个问题。
当用"xb"或者"xt"模式打开文件时,如果该文件存在,则会报错。因此你只能通过此模式打开一个不存在的文件。
5.创建临时文件夹和文件
某些情况下我们可能在程序执行时创建一个临时文件或目录,并希望使用完之后可以自动销毁掉。
此时需要使用tempfile模块。
- tempfile.TemporaryFile()创建一个匿名文件,关闭时即自动销毁
- tempfile.NamedTemporaryFile()创建一个拥有名字的临时文件,可通过f.name查看文件名
- tempfile.TemporaryDirectory()创建一个临时文件夹
- 所有和临时文件相关的函数都允许你通过使用关键字参数
prefix
、suffix
和dir
来自定义目录以及命名规则。
>>> f = NamedTemporaryFile(prefix='mytemp', suffix='.txt', dir='/tmp')
>>> f.name
'/tmp/mytemp8ee899.txt'
>>>