2020620(文件操作)

    技术2024-10-25  18

    A.文件读取

    1.读:获取文件的数据:一次性读取全部数据,文件太大超过内存数内存容易爆,适合小文件,所有的都在内存中,速度快read()

         按行读,一次读一行数据,然后把所有的行都读出来,使用大小文件均可,节省内存,速度相对慢点readline()  for i in fp

    用空间换时间(一次性全读)用时间换空间(逐行读)

    2.写:把数据写入到文件中:清空写:把文件原有的内容都删除掉,再写入新内容fp.write(“xxxx”)不可以写数字

                              追加写:保留原有文件内容的同时,把新的内容写到最后面

    B.文件的操作模式:

    r:读模式,只能读取数据,不能写入新数据

    r+:读写模式,可以同时读也可以同时写(原有的数据会保存)

    w:清空写模式,如果文件不存在则自动创建,如果已存在 ,把原内容删除替换新内容

    w+:清空读写模式,但是只能读新增的内容

    a:追加写,保留原来的内容,在末尾写入新的的内容 rb:读二进制文件的内容 wb:写二进制文件的内容 ab:追加写二进制文件的内容

    文件区分

    文本文件:肉眼可以识别的内容,一般用写字板(.txt)能打开识别,图片、WordExcel都是二进制文件

    二进制文件:用写字板打开基本都是鬼码乱码,图片、WordExcel都是二进制文件

    操作文件格式 打开文件,获取文件句柄fp=open(“e:\\xxx.txt”,”r”)通过文件句柄去读取或写入内容全部读出来read() 按行读:readline() for i in fp 写:fp.write("xxxx") #不可以直接写数字 追加完成关闭fp.close()

     

    ...

    f=open("d:\\14.txt","w",encoding="utf-8")#此处如果为指明编码,默认可能是ansi保存对应gbk

    f.write("今天天气海青蓝3\n")#\n表示换行

    f.write("处处好风光5\n")

    f.write("我们不用上自习,真是开心呀6\n")

    #f.write("我们不用上自习,真是开心呀7\n")

    f.close()

    ...

    f=open("d:\\ 15.txt","w+",encoding="gbk")

    #f.write("123")

    #f.write("345\n")

    #f.write("567sd\n")

    f.close()

    ...

    f=open("d:\\14.txt","r",encoding="utf-8")#此处如果为指明编码,默认可能是ansi保存对应gbk

    content=f.read()#一次性读

    f.close()

    #print(content)

    ...

    #f=open("d:\\14.txt","r",encoding="utf-8")

    #for  i  in  f:#逐行读

    #print(i,end="")#end=""是为了少换行一次,否则会出现读取每个文件内容有个回车然后print也会换行,print的回车去掉

    #再次回车结束遍历即可打印

    #f.close()

    ...

    f=open("d:\\14.txt","r",encoding="utf-8")

    content=f.readlines()#一次性全部读取,文件不能太大

    f.close()

    #print(content)

    #for line in content:

        #print(line,end="")

    ...

    f=open("d:\\14.txt","r+",encoding="utf-8")#r+默认将游标定位在文件最后,新增内容在最后

    #f.seek(0,0)#表示0 从绝对位置,0从第一个位置开始==》文件的开头

    #f.write("生效\n")

    #for line in f:

        #print(line,end="")

    f.close()

    ...

    f=open("d:\\15.txt","a",encoding="utf-8")#a表示append追加

    f.write("江南可采莲\n")

    f.write("荷叶连田田\n")

    f.write("日拱一卒,每天开心\n北京欢迎你")#可以一行写\n换行就可以了

    f.close()

    ...

    #统计一个文件有多少行

    f=open("d:\\14.txt","r+",encoding="utf-8")

    print(len(f.readlines()))

    f.close()

    ...

    #统计有多少数字的行数

    f=open("d:\\14.txt","r+",encoding="utf-8")

    count=0

    for i in f:#把文件的每一行都遍历一遍

        for char in i:#把每一行的每一个字符都判断下是否含有数字

            if char in"0123456789":

                count +=1

                break

    f.close()

    print(count)

    ...

    #过滤文本的空行,统计文本的行数

    f=open("d:\\14.txt","r+",encoding="utf-8")

    count=0

    for line in f:

        if line.strip(): #如果一行内容是空行,strip()后就会变成""就是False

            count+=1

    f.close()

    print(count)

    ...

    #将文本倒着输出,不能直接修改,需要先拿出来,修改后再写进去覆盖下

    #第一步:把所有文件内容拿出来

    f=open("d:\\14.txt","r",encoding="utf-8")

    lines=f.readlines()#所有的行内容放到一个列表里

    #第二步:修改内容:反转顺序

    lines=lines[::-1]

    f.close()

    print(lines)

    #第三步将反转的内容在写进去

    f=open("d:\\14.txt","w",encoding="utf-8")

    f.writelines(lines)

    f.close()

    ...

    #修改文本某几行的数据

    fp=open("d:\\15.txt","r",encoding="utf-8")

    lines = fp.readlines()#所有的行内容放到一个列表里

    fp.close()

    for row_no in range(len(lines)):

        if  "4"  in lines [row_no] or "6" in lines[row_no]:

            lines[row_no]=lines[row_no].replace("4","$$")

            lines[row_no]=lines[row_no].replace("6","##")  

    print(lines)

    fp=open("d:\\15.txt","w",encoding="utf-8")

    fp.writelines(lines)

    fp.close()

    ...

    #二进制的文本处理:复制一个图片或者什么worldExcel

    fp=open("d:\\王丹丹1月项目补贴.pdf","rb")#rb表示二进制的读取

    content=fp.read()#读取所有文件内容

    fp.close()

    fp=open("d:\\王丹丹2月项目补贴.pdf","wb")#wb表示二进制的写

    fp.write(content)#读取所有文件内容

    fp.close()

    ...

    #close()如果没有关闭个人电脑无影响,如果Python语句执行完毕也会自动关闭;如果是在服务器句柄耗尽,Linux有打开文件的上限,65535个,如果不关闭文件,服务器不会自己退出。如果文件不关闭,可能会导致写入的内容没有真正写入磁盘,可以用flash()时时刷新生效,with无法使用flush

    #用with不需要保存,会自动保存

    with open("d:\\15.txt","r",encoding="utf-8") as fp: #基于上下文,会自动保存,不需要close

    print(fp.read())

    ...

    fp=open("d:\\15.txt","r",encoding="utf=8")

    fp.readline()

    '北京欢迎你日拱一卒,每天开心$$\n'

    fp.tell()#表示查看读取位置

    46

    fp.readline()

    '荷叶连田田##\n'

    fp.tell()

    65

    >>> fp.seek(0,0)#可以回到首行第一个

    0

    无法直接写入int或者float的类型,需要转化下字符串写入即可

    fp=open("d:\\15.txt","w",encoding="utf=8")

    fp.write(str(12))

    Processed: 0.011, SQL: 9