Day13 文件操作(2)

1187-吴同学

发表文章数:41

首页 » Python » 正文

CSV 文件的操作

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

特点 csv excel
值类型 所有值都是字符串 各种类型
字体颜色等样式 不能指定 可指定
单元格的宽高 不能指定 可指定
合并单元格 不可
多个工作表 不可
嵌入图像图表 不可

csv 文件读取

csv.reader 对象

import csv
with open('exe.csv','r') as f:
    row_csv=csv.reader(f)
    headers = next(row_csv)  # 获得列表对象标题行的信息,这时指针到了标题行末
    print(headers)
    #['name', 'age', 'grade', 'rank']
    print(list(row_csv))  #这句结束指针到了文件末尾,要注释掉,才能正常运行后面的循环
    #[['name', 'age', 'grade', 'rank'], ['littleyueyue', '18', 'highschool', '150'], ['little_yue', '16', 'midleschool', '200'], ['yueyue', '20', 'university', '50']]
    for row in row_csv:
        print(row)
        # ['name', 'age', 'grade', 'rank']
        # ['littleyueyue', '18', 'highschool', '150']
        # ['little_yue', '16', 'midleschool', '200']
        # ['yueyue', '20', 'university', '50']

csv 文件写入

with open('exe2.csv','w',encoding='utf-8') as f:
    row_csv=csv.writer(f)
    #写入单行
    row_csv.writerow(['name', 'age', 'rank'])
    row_csv.writerow(['littleyueyue', '18',  '150'])
    #写入多行
    row_csv.writerows([['little_yue', '16', 'midleschool', '200'],['yueyue', '20', 'university', '50']])

OS和os.path模块

os 模块可以帮助我们直接对操作系统进行操作。可执行文件、命令,直接操作文件、目录等等。以下都是在windows系统下

调用操作系统命令

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

import os
os.system('notepad.exe')

os.system 调用 windows 系统中 ping 命令

import os
os.system("ping www.baidu.com")

直接调用可执行文件

用os.startfile
示例:
运行安装好的微信

import os
os.startfile(r""C:/Program Files (x86)/Tencent/WeChat/WeChat.exe"")

文件和目录操作

操作文件的方法名 描述
remove(path) 删除指定的文件
rename(src,dest) 重命名文件或目录
stat(path) 返回文件的所有属性
listdir(path) 返回 path 目录下的文件和目录列表
import os
#############获取文件和文件夹相关的信息################
print(os.name) #返回当前系统类型 windows->nt linux 和 unix->posix
print(os.sep) #返回当前操作系统所使用的路径分隔符 windows->/ linux 和 unix->/
print(repr(os.linesep)) #返回当前平台使用的换行符 windows->/r/n linux-->/n/
print(os.stat("02.py"))#返回当前文件信息
操作目录的方法名 描述
mkdir(path) 创建目录
(如非完整路径都是相对于当前工作目录,也可用…/表示上一级目录,下同)
makedirs(path1/path2/path3/…) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2…) 删除多级目录(目录为空才能删除)
getcwd() 返回当前工作目录:current work dir
chdir(path) 把 path 设为当前工作目录
walk() 遍历目录树
listdir(path) 列出所给路径下的子目录和子文件
sep 当前操作系统所使用的路径分隔符

示例:

##############关于工作目录的操作###############
print(os.getcwd()) #返回当前工作目录
os.chdir("d:") #改变当前的工作目录为:d:盘根目录
os.mkdir("书籍")#在当前目录下创建目录
os.makedirs("../音乐/台湾/周杰伦") #../指的是上一级目录

os.path 模块

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

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

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

#方法一
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")
    
#方法二
file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py") ]
for filename in file_list2:
    print(filename,end="/t")

walk()递归

返回一个 3 个元素的元组,(dirpath, dirnames, filenames),
dirpath:要列出指定目录的路径
dirnames:目录下的所有文件夹(列表形式返回)
filenames:目录下的所有文件(列表形式返回)

import os
path = os.getcwd()
list_files = os.walk(path)
print(list(list_files))
# [
#('E://PycharmProjects//excpt', ['.idea'], ['1030.py', 'edit.gif', 'edit.txt', 'edit2.jpg', 'edit2.txt', 'exe.csv', 'exe2.csv']), 
#('E://PycharmProjects//excpt//.idea', [], ['encodings.xml', 'excpt.iml', 'misc.xml', 'modules.xml', 'workspace.xml'])
#]

all_files = []
for dirpath,dirnames,filenames in list_files:
	for dir in dirnames:  #因为dirnames是一个列表,os.path.join()不能合并列表
		all_files.append(os.path.join(dirpath,dir))  #dirpath是当前(子目录)的完整路径
	for name in filenames: #因为filenames是一个列表,os.path.join()不能合并列表
		all_files.append(os.path.join(dirpath,name))

shutil 模块

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

拷贝

shutil.copyfile()

import shutil

#拷贝文件shutil.copyfile('待拷贝对象位置、文件名','拷贝后的位置、文件名')
shutil.copyfile('edit2_copy.txt','./电影/小猪/edit2_copy.jpg')

#拷贝目录(新的目录不存在时才能进行正常的拷贝,已存在的会报错)
shutil.copytree('电影','movie')
#将电影目录下的内容都拷贝到新目录下

#通过ignore参数设置复制时忽略的文件类型
shutil.copytree("movie","音乐",ignore=shutil.ignore_patterns("*.txt","*.htm"))

压缩

  1. shutil.make_archive(‘压缩完储存的地址和文件名’.‘压缩文件的格式,如zip’,‘压缩的内容’)
import shutil

shutil.make_archive('音乐/压缩文件名','zip','movie')

Day13 文件操作(2)
2. 用zipfile模块
zipfile.ZipFile(‘压缩文件的文件名.zip’,‘w’)
后续再将要压缩的内容写入write(要写到具体的文件名,否则传入的是空文件夹),或解压extractall(‘解压到的地址’)

import zipfile

# 压缩
a=zipfile.ZipFile('ZIP文件.zip','w')
a.write('movie/明星介绍.txt')
a.write('电影/小猪') #压缩的是一个空的文件夹 
a.close()

b=zipfile.ZipFile('ZIP文件.zip','r')
b.extractall(r'E:/PycharmProjects/excpt/电影') #导入解压到的文件目录
b.close()

递归算法

递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构:

  1. 定义递归头,即什么时候不调用自身方法,是递归的结束条件。若无将陷入死循环。
  2. 递归体。即什么时候需要调用自身方法。
    示例:阶乘
def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)
print(factorial(4))

Day13 文件操作(2)

未经允许不得转载:作者:1187-吴同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Day13 文件操作(2)》 发布于2020-11-13

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录