ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-06-14 12:01:32  阅读:195  来源: 互联网

标签:文件 execute name Python 文件夹 user txt os 2.6


一、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条记录,然后对删除前后的记录总数,判定删除成功。

标签:文件,execute,name,Python,文件夹,user,txt,os,2.6
来源: https://www.cnblogs.com/liujinhui/p/16374098.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有