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())
'''
- 上一篇:Python的文件操作
- 下一篇:python常用文件处理
相关推荐
- 开发者必看的八大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有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- 开发者必看的八大Material Design开源项目
- 另类插这么可爱,一定是…(另类t恤)
- Android常用ADB命令(安卓adb工具是什么)
- 微软Mac版PowerPoint测试Reading Order Pane功能
- Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍
- 用云存储30分钟快速搭建APP,你信吗?
- 谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果
- iOS文本编辑控件UITextField和UITextVie
- Android入门图文教程集锦(android 入门教程)
- 如何使用Android自定义复合视图(如何使用android自定义复合视图)
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)