Python基本技能2

举报
Gere 发表于 2022/07/16 21:48:07 2022/07/16
【摘要】 1、python文件读写的方式文件读写就是一种常见的IO操作。python封装了操作系统的底层接口,直接提供了文件读写相关的操作方法;文件读写不需要额外引入第三方库;一个文件读写的步骤:1、从硬盘中读取一个文件路径2、加载文件到内存中,获取文件对象(也叫文件句柄)3、通过文件对象对对接进行读写操作4、最后需要关闭文件;2、打开一个文件:#一般写法f = open(file,mode,enco...

1、python文件读写的方式

  • 文件读写就是一种常见的IO操作。python封装了操作系统的底层接口,直接提供了文件读写相关的操作方法;文件读写不需要额外引入第三方库;

一个文件读写的步骤:
1、从硬盘中读取一个文件路径
2、加载文件到内存中,获取文件对象(也叫文件句柄)
3、通过文件对象对对接进行读写操作
4、最后需要关闭文件;

2、打开一个文件:

#一般写法
f = open(file,mode,encoding=‘utf8’)

主要是三个参数,文件路径,打开模式,文件编码

关于打开模式的描述如下图:
在这里插入图片描述
关于可写可读的三个模式的区别:

  • r+ 覆盖当前文件指针所在位置的字符;
  • w+ 在打开文件时就会先将文件内容清空,适合重写;
  • a+ 只能写到文件末尾,适合追加;

3、文件读取:

file = '1.txt'
file_obj = open(file,‘r’,encoding='utf-8')
content = file_obj.read()
print(content)
file_obj.close()

以只读模式打开一个文件,读取内容,关闭文件;
使用with 方式,可以写文件关闭代码;

file = '1.txt'
with open(file,‘r’,encoding='utf-8') as file_obj:
		content = file_obj.read()
print(content)

按行读取:

file = '1.txt'
with open(file,‘r’,encoding='utf-8') as file_obj:		    		content = file_obj.readline() #读取一行
print(content)
for line in file_obj.readlines(): #读取多行
   print(line) 		

4、文件的写入:

  • 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’,'w+'或者’wb’表示写文本文件或写二进制文件;
  • python提供了两个“写”方法: write() 和 writelines()。
f1 = open('1.txt', 'w')
f1.write("123")
fl.close()
--------------
f1 = open('1.txt', 'w')
f1.writelines(["1\n", "2\n", "3\n"])
fl.close()

1、目前主流的数据库有两种,

  • 一个是关系型数据库,如MySql
  • 一个是非关系型数据库 如mongodb

对与mysql和mongodb数据库,python中分别有对接的连接操作库

2、python连接mysql:
在python中,连接mysql用到的库是

pymysql

安装方法直接使用命令:

pip install pymsql

引入方式:

import pymysql

连接数据库:

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='123456',
                     database='bookmanager')

获取游标:

cur = db.cursor()

关闭数据库:

db.close()

使用python执行增删改查的操作的完整代码:

#!/usr/bin/python3
 
import pymysql
 
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='123456',
                     database='bookmanager')
#print(db)
cur = db.cursor()
#print(cur)

# SQL 插入语句
sql = """INSERT INTO BOOK(NAME,
         AUTHOR, PUBLISH, HAVE, HOT)
         VALUES ('001', 'test', '002', 100, 200)"""
# 查询
sql = "SELECT * FROM BOOK WHERE hot > 1000"

#修改
sql = "UPDATE BOOK SET name = 'ZS1000' WHERE hot > 1000"

#删除
sql = "delete FROM BOOK where  hot > 1000"

sql = """CREATE TABLE TEST (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""
#删除表
sql = "DROP TABLE IF EXISTS TEST"



try:
    cur.execute(sql)
    db.commit()
except:
    print('have exception')
    db.rollback()

db.close()

3、python连接mongodb的库是:

pymongo

安装以及引人:

pip install pymongo
import pymongo

建立数据库连接:

mongo_client = pymongo.MongoClient(“mongodb://192.168.1.200:30000”)

指定数据库:

mongo_db = mongo_client[“test”]

操作数据库 完整代码如下:

#!/usr/bin/python3
 
import pymongo

mongo_client =  pymongo.MongoClient("mongodb://192.168.1.200:30000")

print(mongo_client)

mongo_db = mongo_client["test"]

print(mongo_db)

#获取集合
collist = mongo_db.list_collection_names()

#print(collist)

coll = mongo_db['new_coll']
#print(coll)
#coll.insert_one({'name':'new_coll'})
#获取集合
#collist = mongo_db.list_collection_names()
#print(collist)

coll = mongo_db["new_coll"]

for x in coll.find():
    print(x)

#query_my = {"name":"new_coll"}
#update_q = {"$set":{"name":"new_coll_1"}}

#coll.update_one(query_my,update_q)
#print(coll.find()[0])
print('*'*25)
query_my = {"name":"new_coll"}
coll.delete_many(query_my)

for x in coll.find():
    print(x)

  • 为什么打包源码
    如果你想让你的实现的python代码,通过pip install 方式供所有人进行下载;那就需要将代码上传到PyPi上,这样才能让所有人使用;

如何打包源码上传:

  • 前提条件:

1、有一个pypi官网账号;注册地址
2、更新pip版本到最新:py -m pip install --upgrade pip
3、通过pip安装twine:要使用twine来上传代码;
4、安装编译工具:pip install --upgrade build

  • 创建项目结构:

第一步,创建本地目录结构;

daletou/
└── src/
    └── daletou/
        ├── __init__.py
        └── dlt.py

以上除了src和__init__.py为固定值,其他都可以自定义;目录结构需保持一致;

其中__init__.py是为了将目录作为包导入,默认可以为空。
dlt.py是包中的一个模块,主要是提供的功能供下载人调用

如在dlt.py中输入如下代码:
代码中提供的一个函数,返回指定的字符串;
此功能是最终上传的pypi后提供给外部的方法;

from random import sample

def random_dlt(num=1,reds_pre=None,blue_pre=None):
    result = []
    for n in range(num):
        if reds_pre is None:
            reds = sample([n for n in range(1,36)],5)
        if blue_pre is None:
            blues = sample([n for n in range(1,13)],2)
        
        reds.sort()
        blues.sort()
        result.append(' '.join(red_balls) + ' + '+ ' '.join(blue_balls))
    return '\n'.join(result)

第二步:创建上传所需的文件;

最终得文件结构如下:

daletou/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.py
├── src/
│   └── daletou/
│       ├── __init__.py
│       └── dlt.py
  • 文件说明:

pyproject.toml告诉构建工具构建项目所需的内容。
打开pyproject.toml并输入以下内容:

[build-system]
requires = ["setuptools>=42"]
build-backend = "setuptools.build_meta"

README.md 是包的描述信息,markdown格式书写;

# study Package
This is a simple study package.

setup.py是setuptools的构建脚本。它告诉 setuptools 您的包(例如名称和版本)以及要包含的代码文件。
打开setup.py并输入以下内容。更改name 以包含您的用户名;这可确保您拥有唯一的包名称,并且您的包不会与其他人按照本教程上传的包冲突。


import setuptools

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setuptools.setup(
    name="daletou",
    version="0.0.1",
    author="Author",
    author_email="author@example.com",
    description="example package",
    long_description=long_description,
    long_description_content_type="text/markdown",
    #url="",
    #project_urls={},
    package_dir={"": "src"},
    packages=setuptools.find_packages(where="src"),
    python_requires=">=3.6",
)

部分属性说明:

  • name是您的包的分发名称。这可以是任何名称;
  • version是包版本。
  • author并author_email用于标识包的作者。
  • description是一个简短的、一句话的包摘要。
  • long_description是包的详细说明。
  • long_description_content_type: 描述使用什么类型的标记。
  • url是项目主页的 URL。可不写。
  • project_urls 显示的任意数量的链接。通常是文档、问题跟踪器等。
  • package_dir是一个字典,src目录被指定为根包。
  • packages 包含在分发包中的所有 Python导入包的列表;
  • python_requires给出项目支持的 Python 版本。

还有有个配置文件setup.cfg,相对于setup.py,此文件配置是静态元数据,内容基本不变;推荐使用setup.py配置;
具体可参考pypi官网解释;


LICENSE是许可文件,参考以下输入既可;

Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

  • 编译打包:

在pyproject.toml文件同级目录;打开命令行工具;
执行命令:

python -m build

开始编译打包
在这里插入图片描述
打包完成后,会生成dist文件和打包文件;
在这里插入图片描述

  • 源码上传:

首先执行命令

twine check dist/*

检查是否存在问题,有问题提示,需要解决;
若无问题;执行以下命令上传;

twine upload dist/*

在这里插入图片描述

  • 验证是否可以安装:

    访问上传成功的地址,是否存在你上传的包;
    使用pip install *** 验证是否可以安装;

注意:如果使用的镜像不是官网,例如国内使用最多的清华镜像,可能需要等5分钟以上才能安装,镜像同步需要时间;

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。