文件处理(二)

CSV文件的读取和写入

CSV文件的操作

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

与Excel文件不同,CSV文件中:

  • 值没有类型,所有值都是字符串
  • 不能指定字体颜色等样式
  • 不能指定单元格的宽高,不能合并单元格
  • 没有多个工作表
  • 不能嵌入图像图表

Python标准库的模块csv提供了读取和写入csv格式文件的对象。

我们在excel中建立一个简单的表格:另存为csv(逗号分隔)

python 复制代码
import csv
with open(r"d:\a.csv", encoding='gbk') as a:
    a_csv = csv.reader(a)    # 创建csv对象,它是一个包含所有数据的列表,每一行为一个元素
    headers = next(a_csv)    # 获得列表对象,包含标题行的信息
    print(headers)
    for row in a_csv:      # 循环打印各行内容
        print(row)

csv.writer对象和csv文件写入

【操作】csv.writer对象写一个csv文件

python 复制代码
import csv
headers = ["工号","姓名","年龄","地址","月薪"]
rows = [("1","龙图",18,"2号院","50000"),("2","够吧",19,"1号院","30000")]
with open(r"d:\b.csv","w") as b:
  b_csv = csv.writer(b)    #创建csv对象
  b_csv.writerow(headers)   #写入一行(标题)
  b_csv.writerows(rows)    #写入多行(数据)

os模块_调用操作系统可执行文件_控制台乱码问题

os和os.path模块

os模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。

⚠️os模块是做系统运维非常重要的基础。

os模块-调用操作系统命令

os.system可以帮助我们直接调用系统的命令

【示例】os.system调用windows系统的记事本程序

python 复制代码
import os
os.system("notepad.exe")

【示例】os.system调用windows系统中ping命令

python 复制代码
import os
os.system("ping www.baidu.com")

⚠️Linux是命令行操作更容易,我们可以通过os.system可以更加容易的调用相关的命令;
控制台输出中文可能会有乱码问题,可以在file-->setting中设置:

os.startfile:直接调用可执行文件

【示例】运行安装好的微信

python 复制代码
import os
os.startfile(r"D:\wechat\WeChat.exe")

os模块_获取文件信息_创建和删除文件夹

os模块-文件和目录操作

我们可以通过前面讲的文件对象实现对于文件内容的读写操作。如果,还需要对文件和目录做其他操作,可以使用osos.path模块。

os模块下常用操作文件的方法

方法名 描述
remove(path) 删除指定的文件
rename(src,dest) 重命名文件或目录
stat(path) 返回文件的所有属性
listdir(path) 返回path目录下的文件和目录列表

os模块下关于目录操作的相关方法,汇总如下:

方法名 描述
mkdir(path) 创建目录
makedirs(path1/path2/path3/...) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2...) 删除多级目录
getcwd() 返回当前工作目录:current work dir
chdir(path) 把path设为当前工作目录
walk() 遍历目录树
sep 当前操作系统所使用的路径分隔符

【示例】os模块:创建、删除目录、获取文件信息等

python 复制代码
import os
#打印基本的信息
print(os.name) #windows-->nt  linux-->posix
print(os.sep)  #windows-->\  linux-->/
print(repr(os.linesep))  #windows-->\r\n  linux-->\n
a = '3'
print(a)
print(repr(a))   #repr可以显示数据信息
#获取文件和文件夹的相关信息
print(os.stat("my01.py"))
#关于工作目录的操作
print(os.getcwd())  #获得当前工作目录
os.chdir("d:")   #当前的工作目录就变成了d:的根目录

os.path模块_常用方法

os.path模块

os.path模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作

方法 描述
isabs(path) 判断path是否绝对路径
isdir(path) 判断path是否为目录
isfile(path) 判断path是否为文件
exists(path) 判断指定路径的文件是否存在
getsize(filename) 返回文件的大小
abspath(path) 返回绝对路径
dirname(p) 返回目录的路径
getatime(filename) 返回文件的最后访问时间
getmtime(filename) 返回文件的最后修改时间
walk(top,func,arg) 递归方式遍历目录
join(path,*paths) 连接多个path
split(path) 对路径进行分割,以列表形式返回
splitext(path) 从路径中分割文件的扩展名

【示例】测试os.path中常用方法

python 复制代码
#测试os.path常用方法
import os
import os.path
​
#################获得目录、文件基本信息######################
print(os.path.isabs("d:/a.txt"))  #是否绝对路径
print(os.path.isdir("d:/a.txt"))  #是否目录
print(os.path.isfile("d:/a.txt"))  #是否文件
print(os.path.exists("a.txt"))   #文件是否存在
print(os.path.getsize("a.txt"))   #文件大小
print(os.path.abspath("a.txt"))   #输出绝对路径
print(os.path.dirname("d:/a.txt")) #输出所在目录
​
########获得创建时间、访问时间、最后修改时间##########
print(os.path.getctime("a.txt"))  #返回创建时间
print(os.path.getatime("a.txt"))  #返回最后访问时间
print(os.path.getmtime("a.txt"))  #返回最后修改时间
​
################对路径进行分割、连接操作####################
path = os.path.abspath("a.txt")   #返回绝对路径
print(os.path.split(path))     #返回元组:目录、文件 ('C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os', 'a.txt')
print(os.path.splitext(path))    #返回元组:路径、扩展名 ('C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os\\a', '.txt')
print(os.path.join("aa","bb","cc")) #返回路径:aa/bb/cc

【示例】列出指定目录下所有的.py文件,并输出文件名

python 复制代码
#列出指定目录下所有的.py文件,并输出文件名
import os
import os.path
​
path = os.getcwd()
file_list = os.listdir(path) #列出子目录和子文件
for filename in file_list:
    pos = filename.rfind(".")
    if filename[pos+1:]=="py":
      print(filename,end="\t")
​
​
print("##################")
file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py") ]
for filename in file_list2:
  print(filename,end="\t")

os模块_使用walk递归遍历所有子目录和子文件

walk()递归遍历所有文件和目录

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。格式如下:

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

其中,top:是要遍历的目录。topdown:可选,True,先遍历top目录再遍历子目录。

返回三元组(rootdirsfiles):

root:当前正在遍历的文件夹本身

dirs:一个列表,该文件夹中所有的目录的名字

files:一个列表,该文件夹中所有的文件的名字

【示例】使用walk()递归遍历所有文件和目录

python 复制代码
import os
​
path = os.getcwd()
list_files = os.walk(path,topdown=False)
​
for root,dirs,files in list_files:
  for name in files:
    print(os.path.join(root,name))
  for name in dirs:
    print(os.path.join(root,name))

shutil模块_文件和目录的拷贝

shutil模块(拷贝和压缩)

shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

os模块提供了对目录或文件的一般操作。shutil模块作为补充,提供了移动、复制、压缩、解压等操作,这些os模块都没有提供。

【示例】实现文件的拷贝

python 复制代码
import shutil
​
#copy文件内容
shutil.copyfile("a.txt","a_copy.txt")

【示例】实现将文件夹所有内容压缩(使用shutil模块)

python 复制代码
import shutil
import zipfile
#将"电影/学习"文件夹下所有内容压缩到"音乐2"文件夹下生成movie.zip
#shutil.make_archive("音乐2/movie","zip","电影/学习")
​
#压缩:将指定的多个文件压缩到一个zip文件
#z = zipfile.ZipFile("a.zip","w")
#z.write("1.txt")
#z.write("2.txt")
#z.close()

【示例】实现将压缩包解压缩到指定文件夹(使用shutil模块)

python 复制代码
import shutil
import zipfile
#解压缩:
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()

递归算法原理

递归遍历目录下所有文件

【示例】使用递归算法遍历目录下所有文件

python 复制代码
import os
allfile=[]

def getFiles(path,level):
  childFiles = os.listdir(path)
  for file in childFiles:
    filepath = os.path.join(path,file)
    if os.path.isdir(filepath):
      getFiles(filepath,level+1)
    allfile.append("\t"*level+filepath)


getFiles(os.getcwd(),0)


for f in reversed(allfile):
  print(f)

递归算法_目录树结构的展示

python 复制代码
import os
import os.path
​
#递归遍历目录树
def my_print_file(path,level):
  child_files = os.listdir(path)
  for file in child_files:
    file_path = os.path.join(path,file)
    print("\t"*level+file_path[file_path.rfind(os.sep)+1:])
    if os.path.isdir(file_path):
      my_print_file(file_path,level+1)
​
my_print_file("电影",0)
相关推荐
databook7 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar9 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780519 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_9 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机16 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机17 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i17 小时前
drf初步梳理
python·django
每日AI新事件17 小时前
python的异步函数
python