Python_文件处理

1.常用的两种打开文件的方法(以d盘目录下x.txt文件为例)

#方法1:通过需要.close()进行关闭
f = open(r'd:\x.txt','r')
f.close()

#方法2:直接用with打开文件
with open(r'd:\x.txt','r') as f:
    pass

2.常见的文件操作

(1)读写内容

#写入操作.write\.writelines
with open(r'x.txt','w') as f: #创建utf-8编码模式的系统文件
    f.write('the firstline')    #将中间内容写入文档
    f.writelines(['one\n','two\n','three\n']) #将字符串列表写入文档,系统不会自动换行,需要手动输入转义字符

#读取操作.read\.readline\.readlines
with open(r'x.txt','r') as f:
    print(f.read())    #空格中可以填写需要读取的字符,若为空,则默认读取全部文件

#readline的具体用法-读取一行内容,并作为结果返回
with open(r'x.txt','r') as f:
    while True:
        fragment = f.readline()
        if not fragment:
            break
        print(fragment,end = '')

#readlines列表的遍历-读取所有内容,并返回一个列表,每一行为一个元素
with open(r'x.txt','r') as f:
    list = f.readlines()
for line in list:
    print(line,end = '')

#二进制文件的读取和写入
with open(r'day1\sdf.png','rb') as f:
    with open(r'day1\sdf_copy.png','wb') as g:
        for line in f.readlines():
            g.write(line)

(2)读取文件对象的属性

with open('x.txt','r') as f:
    print(f.name)   #返回文件名称
    print(f.mode)   #返回文件打开模式
    print(f.closed) #返回文件是否关闭

 

(3)指针操作

#指针操作
with open('x.txt','r') as f:
    print(f.tell()) #返回指针位置
    f.seek(3)       #讲指针位置移动到第三个字节,前面的数为正则正向,为负则反向。后面的数不填默认为0,即从头开始,1从此处开始,2为从末尾。
    print(f.tell())
    print(f.readline(),end = '')    #从指针位置开始,读取一行内容
    print(f.tell())

(4)enumerate()函数的应用(操作每行增加行号)

#enumerate()函数的应用(操作每行增加行号)
with open('x.txt','r') as f:
    lines = f.readlines()
    list = [line.rstrip()+'#'+str(index+1)+'\n' for index,line in enumerate(lines)]  #推导式生成列表,enumerate生成的是索引+元素构成元组作为元素的列表
with open('x.txt','w') as f:
    f.writelines(list)

(5)pickle序列化

#pickle序列化
import pickle
a1 = [1,2,3,4,5]
a2 = (3,5,1)
a3 = 'asdqweqwe'
#序列化:
with open('x.dat','wb') as f:    #按顺序序列化
    pickle.dump(a1,f);pickle.dump(a2,f);pickle.dump(a3,f)
with open('x.dat','rb') as f:    #按序列化的顺序反序列化
    b1 = pickle.load(f);b2 = pickle.load(f);b3 = pickle.load(f)
print(b1);print(b2);print(b3)

(6)csv文件的读取和写入

#csv文件的写入和读取
import csv
headline = ['name','age','salary']
rows = [['Kryser',18,50000],['Lily',16,2000]]
with open('dd.csv','w') as f:
    a_csv = csv.writer(f)       #启用写入器
    a_csv.writerow(headline)    #写入一行
    a_csv.writerows(rows)       #写入多行,每行为列表的一个元素

with open('dd.csv','r') as f:
    b_csv = csv.reader(f)       #启用阅读器
    for line in b_csv:          #需要通过遍历打印
        if line == []:
            pass
        else:
            print(line)

 

3.os模块应用

(1)使用walk遍历工作目录下所有文件和目录的绝对路径

import os
all_file = []
path = os.getcwd()
lists = os.walk(path)
for dirpath, dirnames, filesname in lists:
    for dir in dirnames:
        all_file.append(os.path.join(dirpath,dir))  #目录的绝对路径
    for file in filesname:
        all_file.append(os.path.join(dirpath,file)) #文件的绝对路径

for f in all_file:  #遍历当前工作目录下的所有文件及目录的绝对路径形成的路径
    print(f)

(2)返回工作目录下的所有指定类型的文件名(以.py文件为例)

import os.path
path = os.getcwd()
list = os.listdir(path)
#method1
for file in list:
    if file.endswith('py'):
        print(file)
#method2
listc = [file for file in list if file.endswith('py')]  #推导式生成列表
for f in listc:
    print(f)

(3)遍历目录树

#遍历目录树
import os.path
all_files = []
def getAllFiles(path,level):     #此函数旨在实现输出一个包含path下的所有子文件与子目录的绝对路径的列表,以及实现缩进
    childFiles = os.listdir(path)
    for file in childFiles:
        filePath = os.path.join(path,file)
        if os.path.isdir(filePath):
            getAllFiles(filePath,level+1)
        all_files.append(level*'\t'+filePath)
a = getAllFiles('day1',0)        #调用函数
for f in reversed(all_files):    #逆序遍历该列表
    print(f)

(4)常用os模块

#常见的os方法:
import os
#1.os模块下系统读取的方法:
print(os.name)      #windows返回nt,Linux返回posix
#2.os模块下常用操作文件的方法:
os.remove(r'day1\damn\33.mp4')  #删除指定文件
os.rename('dd.csv','xx.csv')    #重命名指定文件
print(os.stat(r'day1\x.txt'))         #返回指定文件的所有属性(信息)
#3.os模块下关于目录操作的相关方法:
print(os.listdir('day1'))               #返回一个列表,列表内容为制定目录下的一级子目录以及子文件
os.mkdir('新增目录')                        #创建一个新目录,若没有写路径,则默认路径为工作目录下
os.rmdir('新增目录')                        #删除指定目录
os.makedirs('澳大利亚\悉尼\悉尼大学')         #创建多级目录
os.removedirs('澳大利亚\悉尼\悉尼大学')       #删除多级目录
os.getcwd()                             #获取当前工作路径
os.chdir('d:')                          #改变工作路径到指定位置
print(os.sep)                           #返回当前操作系统所使用的分隔符
print(repr(os.linesep))                 #返回当前操作系统所使用的换行符
#os.path模块
import os.path      #或者from os import path
#1.判断
print(os.path.isabs(r'd:\x.txt'))       #判断是否为绝对路径
print(os.path.isdir('day1\澳大利亚'))       #判断是否为目录(文件夹)
print(os.path.isfile(r'day1\x.txt'))    #判断是否为文件
print(os.path.exists(r'd:\x.txt'))      #判断路径是否存在
#2.返回
print(os.path.getsize('x.txt'))   #获取文件大小
print(os.path.abspath(r'd:\x.txt'))     #获取文件的绝对路径
print(os.path.dirname(r'd:\x.txt'))     #获取该文件的目录名称
print(os.path.getatime(r'd:\x.txt'))    #获取最后一次访问时间
print(os.path.getmtime(r'd:\x.txt'))    #获取最后一次修改时间
print(os.path.getctime(r'd:\x.txt'))    #获取文件的创建时间
#3.切分或连接路径
print(os.path.join('a','b','c'))        #把join里的字符用分隔符\连接起来
print(os.path.split(r'd:\x.txt'))       #对路径进行分割,以元组形式返回(已经分割的目录路径+文件名)
print(os.path.splitext(r'd:\x.txt'))    #同上,不过元组内容为已经分割的文件路径+后缀

4.shutil模块、zipfile模块

#shutil、zipfile模块
import shutil
#1.拷贝
shutil.copyfile('x.txt','x_copy.txt')       #拷贝单个文件
shutil.copytree('day1\澳大利亚','day1\城市')  #把一个目录拷贝到新建的目录
shutil.copytree('day1\澳大利亚','day1\metro',ignore = shutil.ignore_patterns('*.txt')) #功能同上,但是忽略掉指定类型的文件
#2.压缩
#shutil模块
shutil.make_archive('city','zip','day1')    #将day1目录下的所有文件,以zip格式,压缩至当前工作目录下新创建的city文件中
#zipfile模块
#(1)压缩
import zipfile
z1 = zipfile.ZipFile('a.zip','w')           #创建压缩文件a,格式为zip
z1.write('x.txt')                           #将x.txt写入压缩文件a中
z1.close()
#(2)解压缩
z2 = zipfile.ZipFile('a.zip','r')           #创建并打开压缩文件a,采用读模式
z2.extractall('new')                        #将a压缩文件中所有的压缩内容解压,并存入名为new的文件中
z2.close()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Krysertim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值