当前位置: 移动技术网 > IT编程>脚本编程>Python > python(day023——文件和目录操作3)

python(day023——文件和目录操作3)

2020年07月08日  | 移动技术网IT编程  | 我要评论

1.读写

"w+":打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

>>> fp=open("aa.txt","w+")
>>> fp.write("好好学习\n")
5
>>> fp.write("天天向上\n")
5
>>> fp.seek(0,0)
0
>>> fp.readline()
'好好学习\n'
>>> fp.readline()
'天天向上\n'
>>> fp.readline()
''
>>> fp.close()

"r+":打开一个文件用于读写。文件指针将会放在文件的开头。

>>> fp=open("aa.txt","r+")
>>> fp.readline()
'好好学习\n'
>>> fp.readline()
'天天向上\n'
>>> fp.seek(0,0)
0
>>> fp.write("hello world\n")
12
>>> fp.seek(0,0)
0
>>> fp.readline()
'hello world\n'
>>> fp.readline()
'向上\n'
>>> fp.readline()
''
>>> fp.close()

"a+":打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

>>> fp=open("aa.txt","a+")
>>> fp.readline()
''
>>> fp.seek(0,0)
0
>>> fp.readline()
'hello world\n'
>>> fp.seek(0,0)
0
>>> fp.write("加油!")  #a+模式下,永远写在最后面
3
>>> fp.seek(0,0)    
0
>>> fp.read()
'hello world\n向上\n加油!'
>>> fp.close()

fp.read() 和fp.readline()可指定阅读字符数量。其中read可以跨行读,readline不行。

>>> fp=open("aa.txt","r+")
>>> fp.read(10)
'hello worl'
>>> fp.readline(2)
'd\n'
>>> fp.readline(2)
'向上'
>>> fp.readline(2)
'\n'
>>> fp.readline(2)
'加油'
>>> fp.close()

一个文件,可以被多个句柄打开。

句柄泄露

>>> fp1=open("aa.txt","r+")
>>> fp2=open("aa.txt","r+")
>>> fp1.readline()
'hello world\n'
>>> fp2.readline()
'hello world\n'

2.with打开文件:不用关闭文件

>>> with open("aa.txt") as fp:
...     print(fp.read())
...
hello world
向上
加油!
#with的实现原理
class Sample:
    def __enter__(self):#准备的时候干什么事儿,返回的结果
                        #存在as 后面的变量里面
        print("In __enter__()")
        return "Foo"

    #with主体代码结束后需要做的事情
    def __exit__(self, type, value, trace):
        print("In __exit__()")

def get_sample():
    return Sample()#返回了类的实例

#with的实现机制:上下文管理机制
with get_sample() as sample:
    print("sample:", sample)

"""
__enter__方法:定义了执行with下面代码之前,需要做的事情通常是资源准备。
__exit__方法:定义了执行with下面代码之后,需要做的事情通常是资源释放和清理。
这两个方法关联到了with的代码块,以此实现了上下文管理机制。
as sample中的sample值来自于__enter__方法的返回值。
"""

"""
结果:
In __enter__()
sample: Foo
In __exit__()
"""

3.二进制文件的操作:rb、wb、ab

>>> pic1=open("1.jpg","rb")
>>> pic2=open("new_1.jpg","wb")
>>> content=pic1.read()
>>> pic2.write(content)
28436
>>> pic1.close()
>>> pic2.close()

4.文件属性

>>> fp=open("aa.txt","r")
>>> print(fp.closed)  #文件是否被关闭
False
>>> print(fp.mode)  #文件以什么模式打开
r
>>> print(fp.name)  #文件名称
aa.txt
>>> fp.close()
>>> print(fp.closed)
True

5.fp.writelines()

>>> fp=open("aa.txt","w")
>>> fp.writelines(["好好学习\n","天天向上\n"])  #写入多行
>>> fp.close()

6.文件操作常用方法

fp.tell():返回游标所在位置

fp.seek():移动游标位置

fp.truncate():截取文件,括号输入截取字节数量。默认是裁到当前文件操作标记的位置。如果要裁的内容比文件还大,则可能不改变文件,或补0或者随机加入内容。

7.linecache模块:不常用,用时候百度吧!

8.序列化:Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为持久地储存对象(序列化)。

>>> fp=open("aa.txt","wb")
>>> a=100
>>> b=[1,2,3]
>>> pickle.dump(a,fp)
>>> pickle.dump(b,fp)
>>> fp.close()
>>> ^Z

#再次进入cmd
>>> import pickle
>>> fp=open("aa.txt","rb")
>>> a=pickle.load(fp)
>>> a
100
>>> b=pickle.load(fp)
>>> b
[1, 2, 3]
>>> fp.close()

目录操作

  • os.getcwd():获取当前工作目录,即当前Python脚本工作的目录路径。
  • os. chdir(path):改变当前脚本工作目录;相当于shell下的cd命令。
  • os.pardir:返回当前目录的父目录('..')
  • os.name:获取当前使用的操作系统类型(其中 ‘nt’ 是 windows,’posix’ 是 linux 或者 unix)。
  • os.mkdir(path [, mode=0777]):生成单级目录;相当于linux中的mkdir dirname。 参数mode表示生成的目录的权限,默认是超级权限,也就是0777。
  • os.makedirs(path [, mode=0777]):可生成多层递归目录,父目录如果不存在,递归生成。 参数mode表示生成的目录的权限,默认是超级权限,也就是0777。
  • os.removedirs(path):若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推。
  • os.rmdir(path):删除单级空目录,若目录不为空则无法删除,会报错;相当Linux中的rmdir dirname。
  • os.remove(filePath):删除一个指定的文件,参数filePath表示文件所在的路径。 注意:该方法只能删除文件,不能删除目录。
  • os.listdir(path):列出指定目录下的所有文件和子目录,包括隐藏文件或目录,并以列表形式返回。
  • os.rename(oldname, newname):重命名文件/目录。
  • os.stat(path):删除单级空目录,若目录不为空则无法删除,会报错;相当Linux中的rmdir dirname。
  • os.utime(path[, (atime, mtime)]):修改文件的时间属性,设置文件的access and modified time为给定的时间,如果未指定atime和mtime参数,修改的时间将会是当前的时间。
  • os.system (command):运行shell命令。
  • os.sep:输出操作系统的特定的路径分隔符。Win下为“\”,Linux下为“/”
  • os.pathsep:输出用于分割文件路径的字符串。
  • os.linesep:输出当前平台是用的行终止符,win下为“\r\n”,Linux下为“\n”,Mac使用'\r'。
  • os.environ:获取系统环境变量。 该类中还有一些其他的方法,比如设置环境变量等,有需要自省查阅
  • os.popen(command [, mode='r' [, bufsize]]):运行shell命令,并返回一个文件对象。然后通过操作文件的方法去操作这个文件对象。
  • os.walk(top, topdown=True, οnerrοr=None, followlinks=False):
  • 参数说明: top:表示需要遍历的目录树的路径。 topdown的默认值是“True”,表示首先返回目录树下的文件,然后遍历目录树下的子目录。值设为False时,则表示先遍历目录树下的子目录,返回子目录下的文件,最后返回根目录下的文件。 onerror的默认值是“None”,表示忽略文件遍历时产生的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。 该函数返回一个列表,列表中的每一个元素都是一个元组,该元组有3个元素,分别表示每次遍历的路径名,目录列表和文件列表。 默认情况下,os.walk 不会遍历软链接指向的子目录,若有需要请将followlinks设定为true
#创建五级目录,每级有同名文件,文件内容同文件名
import os
os.chdir("d:\\test")
for i in range(1,6):
    os_flag="test"+str(i)
    os.mkdir(os_flag)
    os.chdir(os_flag)
    fp=open(os_flag+".txt","w")
    fp.write(os_flag)
    fp.close()
print("执行完毕")
>>> os.getcwd()
'd:\\test\\test1'
>>> os.chdir(os.pardir)
>>> os.getcwd()
'd:\\test'
>>> os.chdir("..")
>>> os.getcwd()
'd:\\'
#encoding=utf-8
import os

#root表示当前被访问的目录名称
#dirs表示当前目录中所有的子目录名称(元祖)
#dirs表示当前目录中所有的文件名称(元祖)

#最外层for实现了,每一个目录的遍历
for root, dirs, files in os.walk("d:\\test",topdown=False) :
    print(u"当前目录:",root) #打印目录绝对路径
    for name in files :#内层for实现了,遍历某一个目录中所有的文件名称
        print(u'文件名:',os.path.join(root,name) )#打印文件绝对路径

    for name in dirs :#实现遍历某一个目录中的所有子目录名称
        print(u'目录名:',name) #打印目录绝对路径

    print("*"*20)
  •  os.path.abspath(path):返回path规范化的绝对路径(但这个路径不一定是真实存在的路径)。当前路径+path
  •  os.path.split(path):将path分割成目录和文件名(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在),并存于元组中返回。
  • os.path.dirname(path):返回path的目录路径,其实就是os.path.split(path)的第一个元素。
  • os.path.basename(path):返回path最后的文件名。如果path以/或\结尾,就会返回空值。即os.path.split(path)的第二个元素。
  • os.path.exists(path):判断path是否存在,如果存在返回True,否则返回False。
  • os.path.isabs(path):判断path是否是绝对路径,如果是返回True,否则返回False。
  • os.path.isfile(path):判断path是否是文件,如果是返回True,否则返回False。
  • os.path.isdir(path):判断path是否是目录,如果是目录返回True,否则返回False。
  • os.path.normpath(path):将path转换成规范的文件路径。
  • os.path.getsize(name):获得文件大小,如果name是目录返回结果是0L或者4096L;如果name代表的目录或文件不存在,怎会报WindowsError异常。
  • os.path.join(a, p):连接两个或更多的路径名,中间以“\”分隔,如果所给的参数中都是绝对路径名,那先给的绝对路径将会被丢弃。
  • os.path.splitext(path):分离文件名与扩展名
  • os.path.splitdrive(path):拆分驱动器和文件路径,并以元组返回结果;主要针对win有效,Linux元组第一个总是空。
  • os.path.getatime(filename):返回文件的最后访问时间,返回的是时间戳。
  • os.path.getmtime(filename):以时间戳的形式返回文件或目录的创建时间,在Unix系统上是文件最近更改的时间,在Windows上是文件或目录的创建时间。
  •  
>>> os.path.abspath("aa.txt")
'D:\\test\\aa.txt'
>>> os.path.abspath("aaaaa.txt")
'D:\\test\\aaaaa.txt'
>>> os.path.split('D:\\test\\aaaaa.txt')
('D:\\test', 'aaaaa.txt')
>>> os.path.dirname('D:\\test\\aaaaa.txt')
'D:\\test'
>>> os.path.basename('D:\\test\\aaaaa.txt')
'aaaaa.txt'
>>> os.path.exists('D:\\test\\aaaaa.txt')
False
>>> os.path.exists('D:\\test\\aa.txt')
True
>>> os.path.isabs("D:\\test\\aa.txt")
True
>>> os.path.isabs("aa.txt")
False
>>> os.path.isfile("aa.txt")
True
>>> os.path.isfile("D:\\test\\aa.txt")
True
>>> os.path.isfile("D:\\test")
False
>>> os.path.isdir("d:\\")
True
>>> os.path.isdir("d:\\test\\aa.txt")
False
>>> os.getcwd()
'D:\\test'
>>> os.remove("aa.txt")
>>> os.path.getsize("1.jpg")
28436
>>> os.path.join("d:\\test","a.txt")
'd:\\test\\a.txt'
>>> os.path.splitext("d:\\test\\a.txt")
('d:\\test\\a', '.txt')
>>> os.path.splitdrive("d:\\test\\a.txt")
('d:', '\\test\\a.txt')
>>> os.path.getatime("d:\\test\\1.jpg")
1593671456.6549156
>>> lastTime=os.path.getatime("d:\\test\\1.jpg")
>>> import time
>>> time.localtime(lastTime)
time.struct_time(tm_year=2020, tm_mon=7, tm_mday=2, tm_hour=14, tm_min=30, tm_sec=56, tm
_wday=3, tm_yday=184, tm_isdst=0)
#判断某个目录下有多少个文件和目录,如果有txt请删除
import os
os.chdir("d:\\test")
l=os.listdir("d:\\test")

print(l)
file_num=0
dir_num=0
for i in l:
    if os.path.isfile(i):
        file_num+=1
        if ".txt" in i:
            os.remove(i)
        pass
    else:
        dir_num+=1

l=os.listdir("d:\\test")
print(l)
print("目录数:",dir_num)
print("文件数:",file_num)
print("执行完毕")

 

本文地址:https://blog.csdn.net/Teeeeesting/article/details/107159058

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网