python小练习--文件操作

简介: python小练习--文件操作

提要:自定义运行快捷键

之前就觉得用鼠标点击还是太麻烦了,今天顺便设置了一下,参考点击这里


练习1:文件操作的初体验与编码问题

write(a):把字符串 a 写入到文件中

writelines(b):把字符串列表写入文件中,不添加换行符


f = open(r"a.txt","w",encoding="utf-8") #指定utf-8编码
f.write("今天是2020-11-16")
f.close()

image.png

编码与解码相匹配,可以正常的查看信息


f = open(r"Blank.txt","a",encoding="utf-8")
s = ["Clichong\n","Lawrence\n","Kacura\n"]
ss = "啦啦啦,啦啦啦,我是卖报的小当家"
f.writelines(s)
f.write(ss)
f.close()

image.png

使用with上下文管理器来管理


s = ["Clichong ","Lawrence ","Kacura "]
with open(r"Blank.txt","w",encoding="utf-8") as myio:
    myio.writelines(s)  #不会自动的换行

image.png

ps:解决控制台乱码问题,设置为统一格式的编码就可以了

image.png


练习2:文件的读取

  • read([size])

从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。

读取到文件末尾,会返回空字符串。

  • readline()

读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。

  • readlines()

文本文件中,每一行作为一个字符串存入列表中,返回该列表

s = ["Clichong ","Lawrence ","Kacura "]
with open(r"Birthday.txt","r",encoding="utf-8") as myio:
    print(myio.read(4),end="\n\n")
    myio.seek(0)
    print(myio.readline(),end="\n\n")
    myio.seek(0)
    print(myio.readlines(),end="\n\n")
    myio.seek(0)
    print(myio.read())

image.png


练习3:为文本文件每一行的末尾增加行号

with open(r"Blank.txt","r",encoding="utf-8") as myio:
    line = myio.readlines()
    print(list(enumerate(line)))  #其中enumerate函数可以为每一行在开头添加一个行号
    myline = [str(information).rstrip()+" #"+str(number+1)+"\n" for number,information in enumerate(line)]
    print(myline)
with open(r"Blank.txt","w",encoding="utf-8") as myio:
    myio.writelines(myline)

image.png


添加了行号

image.png


练习4:复制一个文件

初始版本:

with open(r"Birthday.txt","r",encoding="utf-8") as myfile:
    with open(r"CopyBirthday.txt","w",encoding="utf-8") as mycopyfile:
        while True:
            if myfile.readline():  #由于判断的时候已经读取了文件会造成文件指针的偏移,会丢包
                mycopyfile.write(myfile.readline())
            else:
                break


改进版本:

with open(r"test.txt","r",encoding="utf-8") as myfile:
    with open(r"copytest.txt","w",encoding="utf-8") as mycopyfile:
        while True:
            line = myfile.readline()  #指读取一次,不会丢包
            if line:
                mycopyfile.write(line)
            else:
                break


可以看见,两个文件的内容完全相同

image.png

image.png


练习5:序列化与反序列化

我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。 对象的序列化机制广泛的应用在分布式、并行系统上


pickle.dump(obj, file) obj 就是要被序列化的对象,file 指的是存储的文件

pickle.load(file) 从 file 读取数据,反序列化成对象


import pickle
a1 = "Clichong"
a2 = "Lawrence"
a3 = "Kacura"
with open(r"Blank.txt","wb+") as myfile:    #只能是二进制的,而且不能指定编码形式
    pickle.dump(a1,myfile)
    pickle.dump(a2,myfile)
    pickle.dump(a3,myfile)
    myfile.seek(0)
    print(myfile.read())
with open(r"Blank.txt","rb") as myfile:
    b1 = pickle.load(myfile)
    b2 = pickle.load(myfile)
    b3 = pickle.load(myfile)
    print(b1,b2,b3)

image.png

image.png


练习6:CSV 文件的操作

csv (Comma Separated Values) 是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。


import csv
info = ['id','name','age','salary']
infos = [['1005','Petty','41','32000'],['1006','Kitty','22','10000']]
with open(r"csvfile.csv","w",encoding="utf-8") as myfile:
    writebuf = csv.writer(myfile)
    writebuf.writerow(info)  #写入一行(标题)
    writebuf.writerows(infos) #写入多行(数据)
with open(r"csvfile.csv","r",encoding="utf-8") as myfile:
    readbuf = csv.reader(myfile)  #创建 csv 对象,它是一个包含所有数据的列表,每一行为一个元素
   # headers = next(readbuf)  #获得列表对象,包含标题行的信息
    print(list(readbuf))
    myfile.seek(0)
    linetxt = [id+"-"+name+"-"+age+"-"+salary+"\n" for id,name,age,salary in readbuf]
    with open(r"Blank.txt", "w", encoding="utf-8") as mywritefile:
        mywritefile.writelines(linetxt)


成功的读取并改写数据:

image.png

image.png

练习7:目录操作

import os
import os.path
print("#当前工作路径是",os.getcwd())
#os.mkdir("testdir")    #只能创建一次,若已创建则报错
#os.makedirs("音乐/刘德华")   #一次可以创建多个目录
print("#是否是绝对路径",os.path.isabs("myfile06.py"))
print("#是否是目录文件",os.path.isdir("myfile06.py"))
print("#是否是文件",os.path.isfile("myfile06.py"))
print("#文件是否存在",os.path.exists("myfile06.py"))
print("#文件的大小是",os.path.getsize("myfile06.py"))
print("#返回文件的最后访问时间",os.path.getatime("myfile06.py"))  #返回文件的最后访问时间
print("#返回文件的最后创建时间",os.path.getctime("myfile06.py"))  #返回文件的最后修改时间
print("#返回文件的最后修改时间",os.path.getmtime("myfile06.py"))
print("#直接返回路径",os.path.abspath("myfile06.py"))   #直接返回路径
print("#返回目录路劲",os.path.dirname("E:\PyCharm\workspace\myIO\myfile06.py"))   #返回目录路劲
print("#对路径进行切割",os.path.split(os.path.abspath("myfile06.py")))
print("#对路径切割出文件的拓展名",os.path.splitext(os.path.abspath("myfile06.py")))
s = "D:\\"
print("#对多个目录名进行连接形成绝对路径",os.path.join(s,"音乐","刘德华","忘情水.mp4"))

image.png


练习8:列出指定目录下所有的.py 文件,并输出文件名

方法一:自定义函数

import os
import os.path
os.chdir("E:\PyCharm\workspace")  #更改当前的工作目录
print(os.getcwd())
def FileList(dirname):      #传入一个目录名,就可以打印出目录下的全部.py文件
    if not os.path.isdir(dirname):  #判断是否为目录文件
        print("Error! Not Dir!")
        return
    else:
        mylist = os.listdir(os.path.abspath(dirname)) #将所有的文件输出一个列表中方便处理
        print(mylist)
        for file in mylist:
            filename,filetext = os.path.splitext(file)  #python的特殊语法,真是太简单了
            if filetext == ".py":
                print(file)
FileList("myIO")

image.png

可以看见,正常的输出了全部的.py文件

image.png


方法二:使用endswith

此方法使用了字符串的一个endswith函数可以判断末尾的字符

image.png


for file in os.listdir():
    if file.endswith("py"): #灵活的使用了字符串的函数
        print(file)

image.png


方法三:推导式(一行代码搞掂)

灵活使用推导式可以使代码变得简洁

mypyfile = [pyfile for pyfile in os.listdir() if pyfile.endswith("py")]


如图所示,可以正常的输出

image.png


练习9:walk遍历函数的测试使用

os.walk()方法:返回一个 3 个元素的元组,(dirpath, dirnames, filenames),


  • dirpath:要列出指定目录的路径
  • dirnames:目录下的所有文件夹
  • filenames:目录下的所有文件
#测试walk函数
import os
import os.path
#os.chdir("E:\PyCharm\workspace")
print(os.getcwd())
Allfile = os.walk(os.getcwd())
for dirpath,dirnames,filenames in Allfile:
    for dir in dirnames:
        print(os.path.join(dirpath,dir))
    for file in filenames:
        print(os.path.join(dirpath,file))
  #  print(dirpath)
  #  print(dirnames)
  #  print(filenames)

image.png


练习10:测试shutil模块的拷贝与压缩

拷贝测试

#测试shutil模块
import shutil
import os
print(os.getcwd())
os.chdir("E:\PyCharm\workspace\myIO\音乐\刘德华")
shutil.copy("note.txt","copynote.txt")
os.chdir("E:\PyCharm\workspace\myIO")
#不要忽视.这个符号,要写得完整为.txt,.html
shutil.copytree("音乐\刘德华","电影",ignore=shutil.ignore_patterns(".txt",".html"))


运行前:

image.png

运行后:

image.png


压缩测试

  • 第一种压缩方法
#把目录下:音乐/刘德华下的全部内容压缩到目录:电影/歌手 中去,格式为zip格式
 shutil.make_archive("电影/歌手","zip","音乐/刘德华")

image.png


  • 第二种压缩方法
import shutil
import zipfile
#shutil.make_archive("电影/歌手","zip","音乐/刘德华")
myfile = zipfile.ZipFile("音乐/Clichong.zip","w") #压缩包存放位置
myfile.write("电影/copynote.txt")  #往压缩文件夹中添加的数据
myfile.write("电影/note.txt")
myfile.close()

image.png


解压缩测试

import shutil
import zipfile
#shutil.make_archive("电影/歌手","zip","音乐/刘德华")
'''''''''
myfile = zipfile.ZipFile("音乐/Clichong.zip","w")
myfile.write("电影/copynote.txt")
myfile.write("电影/note.txt")
myfile.close()
'''''''''
myfile2 = zipfile.ZipFile("音乐/Clichong.zip","r")  #要解压缩的文件为Clichong.zip
myfile2.extractall("音乐")  #解压缩的目录
myfile2.close()

image.png


练习11:使用递归的方法遍历整个目录并以树状打印出来

#递归遍历目录
import os
def DirNameSearch(dirpassname,level):
    allname = os.listdir(dirpassname)
    for dirname in allname:
        wholefilename = os.path.join(dirpassname, dirname)
        if os.path.isdir(wholefilename):
            DirNameSearch(wholefilename,level+1)
        else:
            print("|_"+"___"*level,wholefilename)
DirNameSearch("音乐",0)


目录结构如下:

image.png

遍历结果:

image.png

我们以整个目录测试一下:

DirNameSearch("E:\PyCharm\workspace\myIO",0)

image.png

image.png

还是可以比较好的遍历出来的


目录
相关文章
|
15天前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
4月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
56 2
|
14天前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
2月前
|
存储 Python
Python文件操作
Python文件操作
|
2月前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
32 1
|
2月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
45 6
|
1月前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
19 0
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
28 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
3月前
|
安全 Python
python文件操作详解
整个文件操作过程中,我们应始终保持代码的健壮性和清晰性,确保在出现错误时资源能够被正确释放。
46 1
|
3月前
|
安全 Python
Python文件操作全面指南
【8月更文挑战第4天】Python是一种强大的编程语言,支持丰富的文件操作功能。本文全面介绍了Python文件操作,包括读取、写入、追加及关闭文件等基本操作,并演示了如何处理异常以增强程序的健壮性。此外,还深入探讨了使用`os`和`shutil`模块进行高级文件与目录管理的方法,以及如何运用上下文管理器自动管理文件资源,为读者提供了实用的代码示例和最佳实践。
78 5

热门文章

最新文章