百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

python 基础(四)

wptr33 2025-01-02 19:38 30 浏览

# -- coding: utf-8 --
# @Time : 2022/8/23 15:09
# @Author : siyu.yang
# @desc : 第四章 模块,包,文件,日期、时间
#                              python 模块
#   对于一个复杂的功能,为了编写可维护的diamond,我们把很多函数分组,分别放
# 到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种
# 组织代码的方式。
#   在python中,一个.py文件就称之为一个模块(Module)。即一个文件被看作一个
# 独立的模块,一个模块也可以看作一个文件。
#   使用模块可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同
# 模块中,因此,在编写模块时,不必考虑名字会与其它模块冲突。但是也要注意,进来不要与
# 内置函数名字冲突。
# 内置模块:系统自带的,如:sys,os,subprocess,time,json等等   使用代码查看:
# print(help('modules'))
# 自定义模块:自己个人编写的模块代码,自定义模块时注意命名,不能和python自带的模块名称
# 冲突。例如,系统自带了 sys 模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的
# sys模块
# 开源模块:公开的第三方模块,如 https://pypi.python.org/pypi。可以安装pip install
#
# 安装,类似手机app应用实参或者是maven仓库。

# 模块导入:
#   python 允许”导入“其它模块以实习那代码重用,从而也实习那了将独立的二代目文件组织
# 成更大的程序
# 系统。
# 1.import 语句 [常用于导入内置模块]:
#   用于导入模块,import 放在程序的起那么,且按照python标准库模块、python第三方模块、
# 自定义顺序
# 从上到下排开。语法如下;
# import module
# 导入厚,使用 模块名.函数名 引用
# 2.from-import 语句
# 常用于只导入指定模块的部分属性或模糊导入,语法如下:
# from module import name1,[name2[...nameN]]
# 注意:
# 不推荐使用:from module import *
# 使用as 更换名称:from module import name1 as name2
# 通过这种方式引入的时候,条用函数时只能给初函数名,不能给出模块名,但是当两个个模块含有
# 相同的名称函数的时候,后面一次引入会覆盖前一次引入,有了别名之后与哪有的方法名不能在
# 使用了
# 为什么要取别名,两个方法名称从夫了
# 系统模块调用举例:
# import time
# time.sleep(3)
#
# from time import sleep
# sleep(3)

# 用户自定义模块举例:
# 新建test.py,在test.py中定义了函数add:
# def add(a,b):
#     return a+b
# 在其它文件中可以先import test,然后通过test.add(a,b)来调用,当然也可以通过
# from test import add 来引入。
# 备注:在用import 引入模块时,会将引入的模块文件中的代码执行一次。且旨在第一次引入
# 时才会执行模块中的代码。
# import 语句导入指定的模块时会执行3个不揍
# 1.找到模块文件:在模块搜索路径下搜索模块文件
#     程序的主目录
#     python path 目录
#     标准连接库目录
# 2.编译成字节码:文件导入时会编译,因此,顶层文件的 .pyc 字节码文件在内部使用厚会被
# 丢弃,只有被导入的文件才会留下.pyc文件
# 3.导入import (或重载reload)时,python 会立即执行模块文件的顶层程序代码(不在函数
# 内的代码),而位于函数主体内的代码知道函数被调用后才会被执行,reload() 用于重新加载模块。

# 备注:
# 1.如果不想如第三点导入导入模块的代码,常用的解决防范时:在python模块中需要测试或者直接
# 允许代码前加
# 判断自己是不是自己,当另一个模块调用执行的时候__name__的值等于包名.模块名称
# if __name__ == '__main__':
# 2.通过sys.path.append(path) 函数来导入自定义模块的所在的目录


#                                   python 包
#    包用于将一组模块归并到一个目录中,将有联系的模块组织在一起,可以有效避免模块名称
# 冲突的问题让应用组织结构更加清晰。
#    python愈发要求每个包内都必须有__init__.py问及那,__init__.py可包含python代码,单通常
# 为空,仅用于扮演包初始化、替目录产生模块命名空间以及使用目录导入时实现from * 行为的角色。
# python 在执行模块导入时可以只当模块的导入路径 import pack1.pack2.mod1
# 如 python 应用程序目录结构:
# app
#   apps
#      a
#         __init__.py
#         test.py
#      b
#         __init__.py
#      __init__.py
#
# apps 是最顶层的包,a 和 b都是它的子包,可以这样导入
# from apps import test
# a = test.add(3,4)
# print(a)
# 查看环境的变量目录
'''
import sys
sys.path.append('C:/Users/kcadmin/Desktop/python code/PO_UI_Test_Framework')
for i in sys.path:
    print(i)
'''

#                    python 文件操作
# python 文件操作;
#     python 提供了必要的函数和方法进行进行默认情况下的文件基本操作。可以用file对象
# 做大部分的文件操作。
# open 函数
# 你必须先用python 内置的open()函数打开一个文件,创建一个file对象,先骨干的辅助方法
# 才可以调用它进行读写。
# 语法:
# file object = open(file_name[,access_mode][,buffering])
# 各个参数的细节如下:
# access_mode: access_mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下
# 的完全列表。这个参数是非强制的,默认文件访问模式为只读((r)
# buffering : 如果buffering的值被设为 0, 就不会有寄存。如果buffing 的值取1,访问文件
# 时会寄存存行。如果将 buffering 值设为大于1的整数,表明了这就是的寄存区的缓存大小。
#如果取值负值,寄存区的缓存区大小则为系统默认

# access_mode 属性值介绍:
# 对文件的操作包含 r(读) w(写) a(追加)
# r 只读方式打开文件
# rb 以二进制格式打开一个文件用于只读。
# r+ 打开一个文件用于读写
# rb+ 以二进制格式打开一个文件用于读写

# w 写的方式打开文件,表示新建或者覆盖文件,也有 wb w+ wb+ 与 r 类似
# a 追加的方式打开文件,表示再文件内容末尾添加内容,也有 ab a+ ab+
# 注: r、w 方式操作文件时,文件指针指向文件开头,a 方式时,指向文件末尾

# file 对象的属性
# file.closed        返回 ture 如果文件已经被关闭,否则返回false。
# file.mode          返回被打开文件的访问模式
# file.name          返回文件的名称
# file.encoding      返回文件编码
# 模式         r       r+      w       w+      a        a+
#  读          +       +                +
#  写                  +       +        +      +         +
#  创建                         +        +      +         +
#  覆盖                         +        +
#  指针在开始    +       +        +        +
#  指针在结尾                                    +          +

# 读取文件内容:
#    read()  方法从一个打开的文件中读取一个字符。需要重点注意的是,python文件字符串可以是
# 二进制数据,而不仅仅是文字。
# 语法:fileObject.read([count])
# 在这里,被传递的参数要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,
#如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
# 关闭文件:
#     File 对象的close() 方法刷新缓冲区里任何还没有写入的信息,并关闭该文件,这之后
#  便不能再进行写入。
# 语法 : fileObject.close()
# 往文件写入数据:
#    write() 方法可将任何字符串写入一个打开的文件。需要注意重点是,python 字符串可以是
# 二进制数据,而不仅仅是文字。write() 方法不在字符串的结尾不添加换行符 ('\n');
#    flush() 方法刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件
# 语法:
# fileObject.write(string)
# fileObject.flush()
# 其它操作文件方法:
# fp.readline([size])   # 读一行,如果定义了size,有坑你返回的只是一行的一部分
# fp.readlines([size])  # 把文件每一行作为一个list的一个成员。其实它的内部使通过
# 循环调用,如果提供size 参数,size 是表示读取内容的总长,
# 也就是说坑你值读到文件的一部分。
# fp.writelines(eq)     # 把seq的内容全部写道文件中(多行一次性写入)。如果血药换行则要自
                                # 己加入每行的换行符
# fp.next()             # 返回下一行,并将文件操作标记位移到下一行。如果需要换行则要自己加入
# 每行的换行符
# 举例:
# 读入内容 read() read(n) readline()
# 1.read 方法无参数
'''
txt1 = open('C:/Users/kcadmin/Desktop/hello.txt','r',encoding='utf-8')
str1= txt1.read()  
print(str1)
txt1.close()
'''
# 2.read 方法有参数,表示读取的字符数
'''
a = open('C:\\Users\\kcadmin\\Desktop\\python code\\PO_UI_Test_Framework
         \\sample\\test_02\\
demo_04.py',encoding='utf-8')
str1 = a.read(3)
str2 = a.read(3)  # 在同一个io流,如果有多个read会接着从上一次的位置开始读取
print(str1)
print(str2)
'''
# 3.readline() 读取行
'''
txt1 = open('C:/Users/kcadmin/Desktop/hello.txt','r',encoding='utf-8')
# 无参数的时候默认只读一行
str1= txt1.readline()
# 有参数的时候,就是读取的字符数,大于一行,也只返回一行的内容
str2= txt1.readline(33)
# 无参数的时候,读取整个文件的内容,结果是一个列表,每一行时列表的一个元素
str3= txt1.readlines()  
# 有参数的时候,不满一行也会读取一行,超过一行的字符串才会读取下一行
str4= txt1.readlines(3)
print(str1)
print(str2)
print(str3)
print(str4)
txt1.close() 
'''
# 4.写文件
'''
file = open('C:/Users/kcadmin/Desktop/hello.txt','w',encoding='utf-8')
print(file.write('3333333333'))
file.flush()   # 从缓冲区保存到硬盘,只要文件内容发生了改变就必须flush()提交
file.close()   # 关闭文件,不关闭文件会造成文件损坏或文件丢失
'''
#  5.常见属性
'''
txt1 = open('C:/Users/kcadmin/Desktop/hello.txt','a',encoding='utf-8')
print('文件名:',txt1.name)
print('编码:',txt1.encoding)
print('文件权限:',txt1.mode)
print('是否关闭:',txt1.closed)
txt1.close()
print('是否关闭:',txt1.closed)
'''
# 练习:创建一个文件123.txt 文件内容为“我爱学习”
#     创建一个abc.txt 文件内容为“我享受生活”
#     再将两个文件的内容进行交互
'''
txt1 = open('C:/Users/kcadmin/Desktop/123.txt','w')
txt2 = open('C:/Users/kcadmin/Desktop/abc.txt','w')
content1 = '我爱学习'
content2 = '我享受生活'
txt1.write(content1)
txt2.write(content2)
txt1.flush()
txt2.flush()
txt1.close()
txt2.close()

txt3 = open('C:/Users/kcadmin/Desktop/123.txt','r')
txt4= open('C:/Users/kcadmin/Desktop/abc.txt','r')
str1 = txt3.read()
str2 = txt4.read()
txt3.close()
txt4.close()

txt3 = open('C:/Users/kcadmin/Desktop/123.txt','w')
txt4= open('C:/Users/kcadmin/Desktop/abc.txt','w')
txt3.write(str2)
txt4.write(str1)
txt3.flush()
txt4.flush()
txt3.close()
txt4.close()
'''

# 文件位置:
#    tell() 方法告诉你文件内的当前位置,换句话说,下一次的的读写会发生在文件开头这么多字
节之后。
#    seek(offset[from]) 方法改变当前文件的位置。offset 变量表示要移动的字节数。from 变量
# 指定开始移动字节的参考位置。如果from 被设为0,这意味着将b文件的开头作为移动字节的
#参考位置。如果 设为1,则使用当前的位置作为参考位置。如果它设为2,那么该文件的末尾将
# 作为参考位置。如果没有使用b模式(二进制)打开文件,那么只能从文件起始位置产生位移
'''
txt5 = open('C:/Users/kcadmin/Desktop/123.txt','rb')  # 以二进制方式不能指定编码
str = txt5.read(5)
print(str)
print(txt5.tell())
# seek(数量,位置)  0 -- 起始位置,1 -- 当前位置 ,2 -- 文件末尾
print(txt5.seek(6,1))
str2 = txt5.read(5)
print(str2)
txt5.close()
'''

# 重命名和删除文件
#     python 的 os 模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。
# 要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。
# rename() 方法:
# rename() 方法需要两个参数,当前的文件名和新文件名。
# 语法:
# os.rename(current_file,new_file_name)

# remove()方法:
# 你可以用remove() 方法删除文件,需要提供要删除的文件名作为参数
# 语法:
'''
import os
# os.rename('C:/Users/kcadmin/Desktop/123.txt', 'C:/Users/kcadmin/Desktop/aaa.txt')
os.remove('C:\\Users\\kcadmin\\Desktop\\aaa.txt')
'''

# 目录操作:
# mkdir()方法: 可以使用os模块的mkdir()方法当前目录下创建新的目录
# 语法: os.mkdir(file_name)
# chdir()方法: 可以用chdir() 方法来改变当前的目录。
# 语法: os.chdir(filename)
# makedirs()方法:创建多级目录:
# 语法:os.makedirs('c:\python\test')
# getcwd() 方法: 得到当前工作目录
# 语法: os.getcwd()
# isdir()/isfile()方法:检验给出的路径是否是一个目录/文件
# os.path.isdir("c:/book/temp")

#                           日期、时间操作
#    在进行编程活动中,经常会用到日期和时间,python有相应的模块处理日期和时间,
#在介绍python处理日期和时间的方式之前,先理解时间戳概念:
#     时间戳是指格林威时间1970年01月00时00分00秒(北京时间1970年01月00时00分00秒)起到
# 现在的总秒数。通俗的讲,时间戳时一份能够表示一份数据在一个特定时间点已经存在的完整
# 的可验证的数据
#    在python 中常用time和datetime来处理时间【注意导包】
# time 模块一般常用4种方式显示时间:
# 1.时间元组,即用一个元组组装起来的9组数字处理时间
'''
# (年、月、日、是、分、秒、一周的低级日、一年的低级日、夏令时)
t = (2022, 8, 26, 14, 50, 0, 0, 0,0)  
print(t)
'''
# 2.时间戳
'''
import time  
print(time.time())  # 当前时间戳
'''
# time.mktime(t)  # 给订时间的时间戳
'''
import time
t1 = (2022,8,26,14,50,0,0,0,0)
print(time.mktime(t1))
'''
# time.localtime(时间戳)  # 转换时间戳为元组
'''
import  time
print(time.localtime(1661496600.0))
'''
# 3.格式化显示 (即字符串、时间元组相互转换)
# time.strfime("%Y_%m_%d %H:%M:%S:%p",t)  #不加时间元组显示当前时间
# time.strptime(str,'%Y-%m-%d %X')
'''
import time
t = 1661496600
# 价将时间t按照固定的格式显示
print(time.strftime("%Y_%m_%d %H:%M:%p",time.gmtime(t)))  
# 将字符串时间按照指定时间显示
print(time.strptime('2022-8-26 14:50:00','%Y-%m-%d %H:%M:%S'))  

print(time.time())
print(time.localtime(time.time()))
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
print(time.strptime('2022-08-29 15:55:40','%Y-%m-%d %H:%M:%S'))
'''
# 4.英文显示 'Mon Jan 26 00:52:24 1970'
'''
import time
t = (2022,8,29,15,55,40,0,0,0)
print(time.asctime(t))
'''
# datetime模块
# 模块下有几个子模块:
# date:处理年月日
# time:处理时分秒、微妙
# datetime:处理年月日,时分秒,微妙
# 1.时间元组表示:
# dt = datetime.datetime(2022,08,26,15,02,45,0) # (年、月、日、时、分、秒、微妙)
'''
import datetime
dt = datetime.datetime(2022,8,26,15,2,45,0)
print(dt)
'''
# 2.截取时间元组种的部分:
# dt.year     dt.month   dt.date()   dt.time()  dt.weekday()   dt.isoweekday()
'''
import datetime
dt = datetime.datetime(2022,8,26,15,2,45,0)
print('年:',dt.year)
print('月:',dt.month)
print('日期:',dt.date())
print('时间:',dt.time())
print('星期:',dt.weekday())
print('星期几:',dt.isoweekday())  # 返回0-6
'''
# 3.获取当前时间
# datetime.datetime.today()     datetime.datetime.now()
'''
import datetime
print('获取当前时间:',datetime.datetime.today())
print('获取当前时间:',datetime.datetime.now())
'''
# 4.获取时间戳
# dt.timestamp()     dt.fromtimestamp()
'''
import datetime
dt = datetime.datetime(2022,8,26,15,2,45,0)
 # 将时间转换成时间戳
print('将时间转换成时间戳:',dt.timestamp())  
  # 将时间戳转换成字符串
print('将时间戳转换成字符串:',dt.fromtimestamp(dt.timestamp())) 
'''
# 5.按自定义格式返回字符串
# dt.strftime('%Y_%M_%D %H:%M:%s')
'''
import datetime
print(datetime.datetime.strptime('2020-01-01 0:0:0', '%Y-%m-%d %H:%M:%S'))
'''
# 6.英文显示
# dt.ctime()
'''
import datetime
dt = datetime.datetime(2022,8,26,15,2,45,0)
print(dt.ctime())
'''

相关推荐

开发者必看的八大Material Design开源项目

MaterialDesign是介于拟物和扁平之间的一种设计风格,自从它发布以来,便引起了很多开发者的关注,在这里小编介绍在Android开发者当中里最受青睐的八个MaterialDesign开源项...

另类插这么可爱,一定是…(另类t恤)

IT之家(www.ithome.com):另类插图:这么可爱,一定是…OSXMavericks和Yosemite打破了苹果对Mac操作系统传统的命名方式,使用加州的某些标志性景点来替换猫...

Android常用ADB命令(安卓adb工具是什么)

杀死应用①根据包名获取APP的PIDadbshellps|grep应用包名②执行kill命令...

微软Mac版PowerPoint测试Reading Order Pane功能

IT之家5月20日消息,微软公司昨日(5月19日)发布博文,邀请Microsoft365Insiders成员,测试macOS新版PowerPoint演示文稿应用,重点引入...

Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍

前言不同于iOS,Xamarin在VisualStudio中针对Android,可以直接设计使用者界面.在本篇教学文章中,笔者会针对Android的专案目录结构以及基本控制项进行介绍,包...

用云存储30分钟快速搭建APP,你信吗?

背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...

谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果

Pine发自凹非寺量子位|公众号QbitAI当你拍照片时,“模特不好好配合”怎么办?...

iOS文本编辑控件UITextField和UITextVie

记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,...

Android入门图文教程集锦(android 入门教程)

Android入门视频教程集锦AndroidStudio错误gradientandroid:endXattributenotfound...

如何使用Android自定义复合视图(如何使用android自定义复合视图)

在最近的一个客户应用中,我遇到了一个需求,根据选定的值来生成指定数量的编辑框字段,这样用户可以输入人物信息。最初我的想法是把这些逻辑放到Fragment中,只是根据选中值的变化来向线性布局容器中增加编...

原生安卓开发app的框架frida常用关键代码定位

前言有时候可能会对APP进行字符串加密等操作,这样的话你的变量名等一些都被混淆了,看代码就可能无从下手...

教程10 | 三分钟搞定一个智能输入法程序

一案例描述1、考核知识点网格布局线性布局样式和主题Toast2、练习目标掌握网格布局的使用掌握Toast的使用掌握线性布局的使用...

(Android 8.1) 功能与新特性(android的功能)

和你一起终身学习,这里是程序员AndroidAndroid8.1(API级别27)为用户和开发人员引入了各种新特性和功能。本文档重点介绍了开发人员的新功能。通过本章阅读,您将获取到以下内容:Andr...

怎样设置EditText内部文字被锁定不可删除和修改

在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...

如何阻止 Android 活动启动时 EditText 获得焦点

技术背景在Android开发中,当活动启动时,EditText有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...