with语句,文本文件的读取,_enumerate()函数和推导式生成列表,二进制文件的读取和写入,文件对象的常用属性和方法,OS模块文件和目录操作,CSV文件的操作, 使用pickle序列化

Python学习

with语句

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

下面是Demo

with open(r'd.txt','a') as f:
    f.writelines('gaoqi,i love u!')

gaoqi,i love u!
文本文件的读取

文件的读取一般使用有三个方法
1.read([size]):从文件中读取size,并作为结果返回,如果没有size参数,则读取整个文件,读取到文件末尾,会返回空字符串
2.readline():读取一行内容作为结果返回,读取到文件末尾,回返回空字符串
3.readlines()文本文件中,每一行作为一个字符串存入列表中,返回该列表

下面是Demo

with open(r'e.txt',encoding='utf-8') as f:
    str = f.read()
    print(str)
E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/文本文件的读取.py
我 love u
百战程序员
尚学堂

Process finished with exit code 0

with open('e.txt','r',encoding='utf-8') as f:
    for a in f:
        print(a,end='')
E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/文本文件的读取.py
我 love u
百战程序员
尚学堂
Process finished with exit code 0

with open(r'e.txt','r',encoding='utf-8') as f:
    while True:
        fragement = f.readline()
        if not fragement:
            break
        else:
            print(fragement,end='')
E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/文本文件的读取.py
我 love u
百战程序员
尚学堂
Process finished with exit code 0
_enumerate()函数和推导式生成列表

练习。

下面是Demo

a =['我 love u!\n','尚学堂\n','百战程序员\n']
b = enumerate(a)
print(a)
print(list(b))

with open('e.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    #推导式生成列表
    lines = [line.rstrip()+'#'+str(index+1)+'\n' for index,line in enumerate(lines)]
with open('e.txt','w',encoding='utf-8') as f:
    f.writelines(lines)
E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/10.1练习.py
['我 love u!\n', '尚学堂\n', '百战程序员\n']
[(0, '我 love u!\n'), (1, '尚学堂\n'), (2, '百战程序员\n')]

Process finished with exit code 0

with open('e.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    #推导式生成列表
    lines = [line.rstrip()+'#'+str(index+1)+'\n' for index,line in enumerate(lines)]
with open('e.txt','w',encoding='utf-8') as f:
    f.writelines(lines)

我 love u#1#1
百战程序员#2#2
尚学堂#3#3
二进制文件的读取和写入

下面是Demo

with open('aa.gif','rb') as f :
    with open('aa_copy.gif','wb') as w:
        for line in f.readlines():
            w.write(line)


print('图片拷贝完成!,,,,')


E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/二进制文件的读写.py
图片拷贝完成!,,,,

Process finished with exit code 0
文件对象的常用属性和方法

文件对象常用方法:
read([size]):从文件中读取size个字节或者字符的内容返回,若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline():从文本文件中读取一行内容
readlines():把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str):将字符串str内容写入文件
writelines(s):将字符串列表S写入文件,不添加换行符
seek(offset [,whence]:把文件指针移动到新的位置,offset表示相对于whence的多少个字节的偏移量
offset:off为正往结束方向移动,为负往开始方向移动
whence不同的值代表不同含义:
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件尾开始计算
tell():返回文件指针的当前位置
truncate([size]):不论指针在什么位置,只留下指针前size个字节的内容,其余全部删除:如果没有传入size,则当指针当前位置到文件末尾内容全部删除
flush():把缓冲区的内容写入文件,但不关闭文件
close():把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源
下面是Demo

with open('e.txt','r',encoding='utf-8') as f:
    print('文件名是:{0}'.format(f.name))
    print(f.tell())
    print('读取的内容:{0}'.format(str(f.readline())))
    print(f.tell())
    f.seek(3)
    print('读取的内容:{0}'.format(str(f.readline())))
E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/文件对象常用方法和属性.py
文件名是:e.txt
0
读取的内容:我 love u#1#1

16
读取的内容: love u#1#1


Process finished with exit code 0
使用pickle序列化

python中,一切都是对象,对象本质上就是一个存储数据的内存块
我们可以使用pickle模块中的函数,实现序列化和反序列操作
序列化我们使用:pickle.dump(obj,file) obj就是要被序列化的对象,file指的是存储文件 pickle.load(file) 从file读取数据,反序列化成对象
下面是Demo

import pickle

a1 = '袁少旭'
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));print(id(b1))

E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/pickle实现序列化和反序列画.py
袁少旭
234
[10, 20, 30, 40]
2494939062608
2494940618064

Process finished with exit code 0
CSV文件的操作

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

下面是Demo

import csv

with open('dd.csv','r') as f:
    a_csv =csv.reader(f)
 #   print(list(a_csv))
    for row in a_csv:
        print(row)


with open('ee.csv','w') as f:
    b_csv = csv.writer(f)
    b_csv.writerow(['id','姓名','年龄'])
    b_csv.writerow(['1001','袁少旭','18'])

    c = [['1002','xixi','3'],['1003','苏晓红','26']]
    b_csv.writerows(c)

E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/csv文件.py
['银行卡密码', '', '']
['移动号码服务密码', '', '']
['电话密码', '', '']
['社交账号密码', '', '']
['苹果手机下载密码', '', '']
['建设银行网盾', '3', '']
['QQ飞车二级密码', '156', '']
['无线密码', 'yu88', 'yn123']
['', '', '']
['新手机15118585', '苹果ID密码', 'Li314']
['网易邮箱laolig1@163.com', 'n8188', '']

Process finished with exit code 0


id,姓名,年龄

1001,袁少旭,18

1002,xixi,3

1003,苏晓红,26
os和os.path模块

os模块可以帮助我们直接对操作系统进行操作,我们可以直接调用操作系统的可执行文件,命令,直接操作文件,目录等,在系统运维的核心基础
OS

下面是Demo

import os

#os.system('notepad.exe')

#os.system('ping www.baidu.com')
#os.system('cmd')

#直接调用可执行的文件
os.startfile(r'"E:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"')
OS模块文件和目录操作

我们可以通过前面讲的文件对象实现对于文件内容的读写操作,如果还需要对文件和目录做其他操作,我们可以使用os和os.path模块
remove(path):删除指定的文件
rename(src,dest):重命名文件或目录
stat(path):返回文件的所有属性
listdir(path):返回path目录下的文件和目录列表
mkdir(path):创建目录
makedirs(path1/path2/path3/…):创建多级目录
rmdir(path):删除目录
removedirs(path1/path2/…):删除多级目录
getcwd():返回当前工作目录:current work dir
chdir(path):把PATH设为当前目录
walk():遍历目录树
sep:当前操作系统所使用的路径分隔符

下面是Demo

#coding=utf-8
#测试OS模块中,关于文件和目录的操作

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('with上下文管理.py'))


###关于工作目录的操作
# print(os.getcwd())
# os.chdir('d:')#改变当前工作目录为D盘
# os.mkdir('书籍')
###创建目录,创建多级目录,删除
# os.mkdir('书籍')
# os.rmdir('书籍')#相对路径都是相对于当前的工作目录
# os.makedirs('电影/港台/周星星')
# os.removedirs('电影/港台/周星星')#只能删除空的目录

# os.makedirs('../音乐/香港/刘德华')#。。/指的是上一级目录
# os.rename('电影','movie')
dirs = os.listdir('movie')
print(dirs)
OS.path模块

OS.path模块提供了目录相关(路径判断,路径切分,路径链接,文件夹遍历)的操作
下面是Demo

#coding=utf-8
#测试关于os.path关于目录,路径的操作
import os
import os.path

######判断:绝对路径,是否目录,是否文件,文件是否存在######
print(os.path.isabs('d:/a.txt'))#True
print(os.path.isdir('d:/a.txt'))#False
print(os.path.isfile('d:/a.txt'))#True
print(os.path.exists('d:/a.txt'))
######获得文件基本信息######
print(os.path.getsize('b.txt'))
print(os.path.basename('b.txt'))
print(os.path.dirname('d:/a.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'))


E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/os.path.py
True
False
True
True
6
b.txt
d:/
1601521483.3649137
1601521505.011052
1601521505.011052
('E:\\python\\PycharmProjects\\pythonProject4', 'b.txt')
('E:\\python\\PycharmProjects\\pythonProject4\\b', '.txt')
aa\bb\cc

Process finished with exit code 0
列出指定目录下所有的.py文件,并输出文件名

python中,一切都是对象,实际上,执行def定义函数后,系统就创建了相应的函数对象。

下面是Demo

#coding=utf-8
#列出工作目录下所有的文件,并输出文件名
import os
path = os.getcwd()
file_list = os.listdir(path)#列出子目录,子文件
for filename in file_list:
    if filename.endswith('py'):
        print(filename,end='\t')
print('##################')
file_list2 = [filename for filename in os.listdir(path) if filename.endswith('py')]
for f in file_list2:
    print(f)

E:\python\python37\python.exe E:/python/PycharmProjects/pythonProject4/1001练习2.py
10.1练习.py	1001练习2.py	9.29测试.py	csv文件.py	finally测试.py	main.py	os.path.py	os模块.py	os模块文件和目录操作.py	pickle实现序列化和反序列画.py	trackback模块.py	with上下文管理.py	with语句.py	_try_excep基本结构.py	二进制文件的读写.py	异常.py	文件对象常用方法和属性.py	文件的写入.py	文本文件的读取.py	自定义异常.py	##################
10.1练习.py
1001练习2.py
9.29测试.py
csv文件.py
finally测试.py
main.py
os.path.py
os模块.py
os模块文件和目录操作.py
pickle实现序列化和反序列画.py
trackback模块.py
with上下文管理.py
with语句.py
_try_excep基本结构.py
二进制文件的读写.py
异常.py
文件对象常用方法和属性.py
文件的写入.py
文本文件的读取.py
自定义异常.py

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值