文件操作(IO技术)_递归

文件操作(IO技术)

1 读取和关闭

文本文件:存储字符的文件 python默认使用unicode(两个字节一个符号,最多可以表示65536)
二进制文件:用“字节”进行存储

在这里插入图片描述
创建文件对象open()
f = open(r’d\b.txt’,‘a’)
r 读模式
w 写入,如果文件存在,重写内容(处理字符)
a 追加模式,文件不存在创建,文件存在末尾追加内容
b 二进制模式(处理字节)
‘+’ 读、写模式

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象
    f.witelines() 把字符串列表写入文件中,不添加换行符

2 中文乱码问题

windows系统默认的编码是GBK,linux默认的UTF-8,python默认的unicode
打开的时候使用GBK,或者建文件的时候就指定
f = open(r’b.txt’,‘w’,encoding=‘utf-8’)

3 close()

try:
    f = open(r'c.txt','w')
    str = ['aa\n','bb\n','cc\n']
    f.writelines(str)
except BaseException as e:
    print(e)
finally:
    f.close()

4 with(上下文管理器)

s = ['wy\n','wy\n','wy\n']
with open(r'bb.txt','w') as f:
    f.writelines(s)

5 文本文件的读取

  1. read([size]) 默认从文件一开始读到末尾
  2. readline() 读取一行内容作为结果返回,返回空字符串
  3. readlines() 每一行作为一个字符串存入列表中,返回该列表
with open('e.txt',encoding='GBK') as f:
    for a in f:
        print(a,end='')

6 enumerate()

a = ['我love u!\n','仍然\n','哦哦\n']
b= enumerate(a)
print(a)
print(list(b))

c = [ temp.rstrip()+' #'+str(index) for index,temp in enumerate(a)]
print(c)

with open(r'e.txt','r',encoding='GBK') as f:
    lines = f.readlines()
    lines = [line.rstrip() + ' #' + str(index+1)+'\n'for index,line in enumerate(lines)]
with open('e.txt','w',encoding='GBK')as f:
    f.writelines(lines)

I love u! #1
防护额 #2
扶额 #3

7 二进制文件的读取和写入

f = open(r'd:\a','wb')
f = open(r'd:\a','ab')
f = open(r'd:\a','rb')
with open('aa.gig','rb') as f:
    with open('aa_copy.gif','wb') as w:
        for line in f.readlines():
            w.write(line)
print('图片拷贝完成......')

8 文件对象的常用属性和方法

seek 把文件指针移动到新的位置 0:头的位置开始计算,1:从当前位置开始计算,2:从文件尾开始计算
tell 返回文件指针的当前位置
truncate 不论指针在什么位置,只留下指针前size个字节的内容,其余全部删除,如果没有传入size,则当指针当前位置到文件末尾的内容全部删除

with open('e.txt','r',encoding='utf-8') as f:
    print('文件名:{0}'.format(f.name))
    print(f.tell()) #打印指针位置
    print('读取的内容:{0}'.format(str(f.readline())))
    f.seek(3)
    print('读取的内容:{0}'.format(str(f.readline())))
#运行结果
文件名:e.txt
0
读取的内容:我love u! #1

读取的内容:love u! #1

9 pickle序列化

序列化核心:把对象转化成串行化

import pickle
a1 = 'wy'
a2 = 234
a3 = [10,20,30,40]

with open('data.dat','wb') as f:
    pickle.dump(a1,f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
with open('data.dat','rb') as f:
    b1=pickle.load(f)
    b2=pickle.load(f)
    b3=pickle.load(f)
    print(b1);print(b2);print(b3)

    print(id(a1),id(b1))
#运行结果
wy
234
[10, 20, 30, 40]
2986226031024 2986226148720

10 csv文件的操作

用逗号隔开,可以表示表格信息

import csv
with open('csv_3.csv','r',encoding='utf-8-sig') as f:
    a_asv = csv.reader(f)
#    print(list(a_asv))
    for row in a_asv:
        print(row)

with open('ee.csv','w') as f:
    b_csv = csv.writer(f)
    b_csv.writerow(['ID','姓名','年龄'])
    b_csv.writerow(['1001','wy','22'])
    c = [['1002'],['ji'],['56']]
    b_csv.writerow(c)

11 os模块-调用操作系统可执行文件

import os
#os.system('notepad.exe')
#os.system("regedit")
#os.system("ping www.baidu.com")
#os.system('cmd')

#直接调用可执行的文件
os.startfile(r'F:\各种软件\WeChat\WeChat.exe')

12 os模块-文件和目录操作

remove(path)
rename()
stat() #返回文件属性
listdir(path) #返回path目录下的文件和目录列表

mkdir(path) #创建目录
makedirs() #创建多级目录
rmdir() #删除一个目录
removedirs #删除多级目录,目录里面有内容删不了
getcwd() #返回当前工作目录
chdir(path) 把path设为当前工作目录
walk() #遍历目录树
seq #当前操作系统所使用的路径分隔符

import os
###########获取文件和文件夹相关的信息#################
print(os.name) #windows nt linux/unix posix
print(os.sep)  #windows \ linux/unix /
print(repr(os.linesep)) #windows \r \n linux/unix \n\
print(os.stat('io_mppy10.py')) #文件的相关信息
###########关于工作目录的操作######################
#print(os.getcwd())
#os.chdir('d:') #改变工作目录为d盘
#os.mkdir('书籍')
##########创建目录,创建多级目录,删除################
#os.mkdir('书籍')
#os.rmdir('书籍')  #相对路径都是相对于当前的工作目录
#os.makedirs('电影/港台/周星驰')
#os.removedirs('电影/港台/周星驰') #只能删除空目录

#os.makedirs('../音乐/港台/刘德华') #../上一级目录
#os.removedirs('../音乐/港台/刘德华')

#os.remove('电影','movie')

dirs = os.listdir('movie')
print(dirs)

13 os.path

import os
import os.path
print(os.path.isabs('d:/a.txt'))
print(os.path.isdir('d:/'))
print(os.path.isfile('d:/a.txt'))
print(os.path.exists('d:/a.txt'))

##########获得文件基本信息###############################
print(os.path.getsize('b.txt')) #字节数
print(os.path.abspath('b.txt')) #获得绝对路径
print(os.path.dirname('b.txt'))
print(os.path.getctime('b.txt')) #文件创建时间
print(os.path.getatime('b.txt')) #文件最近访问时间
print(os.path.getmtime('b.txt')) #文件最近修改时间

##########对路径的操作###############################
path = os.path.abspath('b.txt')
print(os.path.split(path))
print(os.path.splitext(path))
print(os.path.join('aa','bb','cc'))
import os
path  = os.getcwd()
file_list = os.listdir(path) #列出子目录,子文件
print(file_list)
for filename in file_list:
    if filename.endswith('py'):
        print(filename,end='\t')
print('\n'+'############################')
file_list2 = [filename for filename in os.listdir(path)if filename.endswith('py')]
for f in file_list2:
    print(f,end='\t')

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

os.walk()方法:
返回一个3个元素的元组,(dirpath,dirnames,filenames)
dirname:列出指定目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件

import os

all_files =[]
path = os.getcwd()
list_files = os.walk(path)

for dirpath,dirnames,filenames in list_files:
    for dir in dirnames:
        all_files.append(os.path.join(dirpath,dir))
    for file in filenames:
        all_files.append(os.path.join(dirpath,file))
print(all_files)

15 shutil模块(拷贝和压缩)

import shutil
#shutil.copyfile("1.txt",'1_copy.txt')
#shutil.copytree('movie/港台','电影') #拷贝到的目录不能提前存在
shutil.copytree('movie/港台','电影',ignore=shutil.ignore_patterns('*.txt','*.html'))

import shutil
import zipfile
#拷贝
#shutil.copyfile("1.txt",'1_copy.txt')
#shutil.copytree('movie/港台','电影') #拷贝到的目录不能提前存在
#shutil.copytree('movie/港台','电影',ignore=shutil.ignore_patterns('*.txt','*.html'))

#压缩
#shutil.make_archive('电影/gg','zip','movie/港台')
#z1 = zipfile.ZipFile('a.zip','w')
#z1.write('1.txt')
#z1.write('1_copy.txt')
#z1.close()
#解压缩
z2 = zipfile.ZipFile('a.zip','r')
z2.extractall('电影')
z2.close()

16 递归算法

递归基本思想:自己掉自己
递归头+递归体

num = 1
def a1():
    global num #函数内改变全局变量的值
    num += 1
    print('a1')
    if num <3:
        a1()
def b1():
    print('b1')
a1()
def factorial(n):
    if n==1:
        return n
    else:
        return n*factorial(n-1)
print(factorial(5))
import os
allfiles = []
def getAllFiles(path,level):
    childFiles = os.listdir(path)
    for file in childFiles:
        filepath = os.path.join(path,file)
        if os.path.isdir(filepath):
            getAllFiles(filepath,level+1)
        allfiles.append('\t'*level + filepath )

getAllFiles('test_os',0)

for f in reversed(allfiles):
    print(f)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值