2.6:Python数据存取-文件、文件夹及目录、数据库

一、Python文件读写

1、文件的打开模式

<class '_io.TextIOWrapper'>和<class '_io.BufferedReader'>。python使用 with  as语句来进行文件打开后的自动关闭处理。使用了with as之后,用户可以不用显式调用文件对象的close方法来关闭文件。Python打开文件的函数是open,其核心参数是文件名称和打开模式。默认是“rt”,也就是read和text,读文本文件模式。如果设定rb,即读二进制binary模式,返回的Wrapper对象是不同的,一个是TextIOWrapper类型,一个是BufferedReader类型。

2、文件读取

 Demo1.txt的内容为:文本“Beijing Institute Of Technology”分4行显示。

3、文件打开与写入

 

 writelines方法把一个列表内容直接按顺序写入文件deomo2.txt,不会自动为列表元素添加回车换行。如果需要写入文件时各元素换行排列,这应该手工为每个元素的后面加上回车换行。可以采用列表推导式:fo.writelines([line+"\n" for line in s])。

4、批量存入文件

 

 输出结果:Beijing Institute of Technology is a comprehensive university in Beijing(桌面文件Demo3.txt中)。可以使用文件的write方法多次批量写入数据。这种方法在实际中应用很广泛,比如对一个大文件读取切割成大小相同或特定长度的子文件等。检测条件:桌面有文件Demo3.txt,其内容为: Beijing Institute of Technology is a comprehensive university in Beijing

5、移动指针

输出结果:ChinabuildingForbidden city(桌面文件Demo4.txt中)。首先,列表中的元素没有回车换行,所以会把“GreatbuildingForbidden city”写入文件。但seek(0)把指针重新移到文件头部,然后写入“China”。因此,“China”会覆盖“Great”seek的参数为:0:文件开头; 1: 当前位置; 2: 文件结尾。

6、把模拟数据写入文件

输出结果:桌面有Demo5.txt文件,内容为十行文本(内容为随机生成)。faker是一个模拟数据生成的python库,可以设定模拟生成的语言,如中文:zh_cn,默认为英语。Faker类提供很多方法,如name返回姓名,address返回地址,email返回电子邮件等。

二、文件和文件夹处理

1、获取当前目录

 输出结果:”.”和一个绝对路径。curdir属性返回current directory(当前目录),而getcwd方法则返回当前工作目录(current work directory)。chdir(newd)方法改变当前目录到指定的newd目录。

2、路径分解

 输出结果:('c:\\temp\\test', 'file.txt')。split方法返回一个元组(头,尾),其中尾部是最后一个斜杠后面的内容,其他部分归头部。

3、扩展名分解

 输出结果:('c:\\temp\\test\\file', '.txt')。spletext函数返回一个二元组(根,扩展),其中扩展部分是从最后一个“逗点”到最后的所有文字,忽略其中的“逗点”。扩展部分可以为空。这个方法可以获取一个文件的扩展名。

4、获取目录列表

 输出结果:True,True。Mkdir方法在当前目录下生成一个text目录。然后通过isdir方法判定是否为目录。通过listdir方法可以列出某个目录下所有的文件和目录。通过使用in判定text目录是否在当前目录下。

5、目录树遍历

在当前文件夹下,执行os的walk方法。这个方法是一个迭代方法,对于每一级目录,返回一个三元组(root,dirs,files),分别表示当前目录的根目录,子目录和文件。迭代输出每一级目录下的根目录,文件夹数和文件数量。

6、使用GLOB库进行文件查找

import osimport glob
if "text" not in os.listdir(os.curdir):
  os.mkdir("text")
os.chdir("text")
os.makedirs("L1/L2/L3")
for root,dirs,files in os.walk(os.curdir):
  with open(str(root)+".txt","w+") as f:
    pass
files=glob.glob("*/*.txt")
print(files)

 输出结果:['L1/L2.txt']。在当前目录下生产text目录。然后切换到text目录,使用walk方法,在每个目录下生成txt文件。然后查找后缀为txt的所有文件。星号表示全匹配,问号表示匹配单字,[0-9]表示匹配0-9个数字。

7、文件拷贝

输出结果:success。在当前目录下新建一个文件from.txt,然后判定当前文件创建成功之后,使用shutil的拷贝命令,将文件拷贝到同级目录下,并改名为to.txt。确认to.txt文件存在之后,打印出成功的信息:拷贝成功。

8、文件打包

 

输出结果:压缩成功。在上述目录中,执行压缩代码,可以将text目录下的所有内容压缩为一个zip包,名字为textpack.zip,并存放在当前目录下。通过in判断是否压缩生成所需压缩包,然后输出成功信息。

三、SQLite3数据库存取

1、新建数据库

import os

import sqlite3

 

输出结果:数据创建成功。连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的。创建在硬盘: conn = sqlite3.connect(‘test.db');创建在内存: conn = sqlite3.connect(‘:memory:’)。

2、新建数据库表与数据插入与查询

import os
import sqlite3
from faker import Faker
f=Faker("zh_cn")
conn =sqlite3.connect("test.db")
c = conn.cursor()
c.execute("create table if not exists user (id varchar(20) primary key, name varchar(20))")
for i in range(0,100):         
  c.execute("insert into user (id, name) values ('{}','{}')".format(i,f.name()))

输出结果:共有100条数据,类型是<class 'list'>。创建游标之后,执行数据库建表的SQL命令,生成主键为id的user表。然后插入100条模拟数据。最后执行select查询命令,获取数据,并通过fetchall函数,返回一个python的列表,以便进一步的处理。

3、修改数据

import os
import sqlite3
from faker import Faker
f=Faker("zh_cn")
conn =sqlite3.connect("test.db")
c = conn.cursor()
c.execute("create table if not exists user (id varchar(20) primary key, name varchar(20))")
for i in range(0,100):          
    c.execute("insert into user (id, name) values ('{}','{}')".format(i,f.name()))
c.execute("update user set name='Caocao' where id==0")
c.execute("select * from user where id==0")
r2=c.fetchone()
print("{}".format(r2))

 输出结果:('0', '曹操')。通过SQL命令:update进行更新,并输出更新后的数据。

4、删除数据

conn =sqlite3.connect("test.db")
c = conn.cursor()
c.execute("create table if not exists user (id varchar(20) primary key, name varchar(20))")
for i in range(0,100):          
    c.execute("insert into user (id, name) values ('{}','{}')".format(i,f.name()))
c.execute("select * from user")
r1=c.fetchall()
c.execute("delete from user where id==3")
c.execute("select * from user")
r2=c.fetchall()
print("{}:{}".format(len(r1),len(r2)))

结果输出:99:99。通过SQL语句delete from 删除了第3条记录,然后对删除前后的记录总数,判定删除成功。

posted @ 2022-06-14 11:54  哥们要飞  阅读(230)  评论(0编辑  收藏  举报