python文件操作-------os,shutil模块

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'
>>>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值