python文件

文本文件和二进制文件

文本文件:(.txt,word不是),单纯只存储文本,默认为unicode字符集(采用两个字节表示一个字符)

二进制文件:把数据内容用“字节”进行存储,必须使用专用软件解码。(mp3、mp4、jpg、doc等)

创建文件对象 open() 和 写入 write() writelines()

f = open(r"path","mode") # r之后就不用把路径\\转义

mode有以下几种:
image

文本文件的写入一般就是三个步骤:
1、创建文件对象
2、写入数据
3、关闭文件对象

write()只能传入字符串,writelines()可以传入字符串和字符串列表

f = open(r"path","mode", encoding='utf-8') # 创建文件对象,用utf-8编码
s = "要写入的字符串"
strlist = [要写入的字符串列表,它是顺序遍历写入]
f.write(s) or writelines(s or strlist)
f.close() # 关闭文件流

close()关闭文件流

由于文件底层是操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件,再关闭文件,释放文件对象。

#一个标准规范的文件操作
try:
	f = open(r"path",'mode',encoding='编码')
	strlist = [要写入的字符串列表]
	w.writelines(strlist)
except BaseException as e:
	print(e)
finally: # 资源必须是要关闭的
	f.close()

with 语句(上下文管理器)

with关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原该代码块时的现场。

strlist = [要写入的字符串列表]
with open(r"path",'mode',encoding='编码') as f:
	f.writelines(strlist)

文本文件的读取

image


with open(r"path","r",encoding='utf-8') as f:
	print(f.read(4)) # 读取一个文件前4个字符
	#通过for遍历文件对象
	for i in f: # 每一个字符串i都以换行符结尾(每次读1行)
		print(i)

enumerate函数

简要来说,一般用来生成把列表标号后的临时对象

具体来说:enumerate生成一个枚举对象。它是一个迭代器,就像一个生成器。迭代一次之后就清空了

a = ['やじゅうせんぱい\n','远野后辈\n','KMR\n']
b = list(enumerate(a)) # list会迭代清空对象,要用b接收
for id,vue in b:
	print(id,vue)

image

一些文件操作的常用方法

image

CSV基本操作

import csv # 导入csv模块

# 读取
with open(r"path\xxx.csv","r",encoding='')as f:
	a_csv = csv.reader(f) # 这也是个类似生成器的对象,list()之后也会清空
#	print(list(a_csv)) # 以行为单位转为list
	for row in a_csv: # 遍历
		print(row)

# 写入
with open(r"path\xxx.csv","w",encoding='')as f:
	a_csv = csv.writer(f) # 写对象
	a_csv.writerow(list) # 将列表写为1行

	l = [['x','y','z'],['x','y','z'],['x','y','z']]
	a_csv.writerows(l) # 遍历列表,把列表里的每个列表存为1行

os模块

以下所有的path指文件绝对路径,或者文件的相对路径(包含文件名)

调用

os.system可以直接调用系统的命令和打开可执行文件

import os
os.system("notepad.exe")# 调用记事本
os.system("regedit") # 调用注册表
os.system("ping www.baidu.com") # ping

os.startfile(r"path\xxx.exe") # 直接调用可执行文件

文件和目录操作

os.path模块可以实现很多对文件和目录的操作

image

#获取文件和文件夹的相关信息
import os
print(os.name) # windows->nt    linux and unix ->posix
print(os.sep) # 分隔符,windows->|   linux and unix->/
print(repr(os.linesep)) # 换行符

print(os.stat(r"filename")) # 文件信息

os.mkdir("path") # 创建目录
print(os.getcwd()) # 获取当前工作目录
os.chdir(r"path") # 改变工作目录
os.rmdir(r"path") # 删除目录

os.removedirs("path")# 删除多级空目录
'''
注意,这个路径包含的所有文件夹(输入相对路径时只会删它的子目录,而不会删相对路径的上级目录)
都会被尝试删除,从叶子向上遍历,直到某个目录不为空时结束
'''

os.makedirs("../xx/xx") # ../上级目录
print(os.listdir("path")) # 列出当前目录中的文件及子目录

os.path

image

import os

path = os.getcwd()

# 输出工作目录中的文件名列表
file_list = os.listdir()
for filename in file_list:
    if filename.endswith("py"):
        print(filename)
        
print(path)
print(os.path.split(path)) # 返回分割后路径列表
print(os.path.join("C:\\","Documents","114514")) # 拼接路径

image

shutil(拷贝和压缩)

import shutil

shutil.copyfile("filepath you want to copy","new filepath") # 拷贝文件
shutil.copytree("dirpath","newdirname",ignore=shutil.ignore_patterns("*.txt","*.py")) # 新目录需要不存在,ignore里的是不需要的文件

shutile.make_archive("zippath","zip","filepath") # 压缩文件

# 压缩多个文件
z1 = zipfile.ZipFile("filename.zip","w")
z1.write("file1")
z1.write("file2")
z1.close
posted @ 2021-08-15 16:56  Lecoww  阅读(158)  评论(0)    收藏  举报