文件是什么:
变量是把数据保存到内存中,如果程序重启或者主机重启,内存中的数据就会丢失。
要想能让数据被持久化储存,就可以把数据存储到硬盘中,也就是在文件中保存。
电影 mp4
歌曲 mp3
图片 jpg ==》》数据都是保存在硬盘上的。
文本 txt
表格 xlsx
1,内存 变量,就是在内存中。
2,硬盘 文件,就是在硬盘中。
(1),内存的空间更小,硬盘空间更大。
(2),内存访问更快,硬盘访问更慢。
(3),内存成本更贵,硬盘成本更便宜。
(4),内存的数据容易丢失,硬盘的数据持久化存储。
文件路径:(目录名之间,使用\来分割,使用/也可以)
文件夹,再包含文件夹的情况,
此处把这一层一层的目录构成的字符串,就称为:“文件的路径”
文件路径也可以视为是文件在硬盘上的身份标识,每个文件对应的路径都是唯一的。
打开文件:
后面的'r',是打开方式。
r表示read,按照读方式打开。
w表示write,按照写方式打开。
a表示append,也是写方式打开,把内容写到原有文件内容的末尾。
TextIOWrapper,是python内部给文件对象起的名字。
open的返回值是一个文件对象。
文件的内容,是在硬盘上的,此处的文件对象,则是内存上的一个变量。
后续读写文件操作,都是拿着这个文件对象来进行操作的。
关闭文件:
文件在打开完成后,使用完了之后,也就一定要关闭。
打开文件,其实是在申请一定的系统资源。
不在使用文件的时候,资源就应该及时释放。否则就可能造成文件资源泄露,进一步导致其他的代码无法顺利打开文件。正是一个系统的资源是有限的,因此一个程序能打开的文件个数,也是有上限的。最大打开文件8189
每个程序在启动的时候,都会默认打开三个文件。所以共有8192
1,标准输入(键盘input) 2,标准输入(显示器print) 3,标准错误(显示器)
python有一个重要的机制,垃圾回收机制(GC),自动的把不使用的变量,给进行释放。
写文件:
#使用write来实现写文件的操作。
# f= open('d:/python/text.txt','w')
# f.write('hello')
# f.close()
#写文件的时候,需要使用w的方式打开,如果是r方式打开,则会抛出异常。
#写方式打开,其实又有两种情况,直接写方式打开,追加写方式打开(如果是使用w方式打开,会清空掉文件原有的内容,)
#如果使用的是a方式打开,则不会清空,写的内容会追加在原有文件内容的末尾。
f=open('d:/python/text.txt','w')
f.write('1111\n')
f.close()
f=open('d:/python/text.txt','a')
f.write('2222')
f.close()
#如果文件对象已经被关闭,那么意味着若系统中和该文件相关的内存资源已经释放了,强行去写,就会出异常。
f=open('d:/python/text.txt','w')
f.close()
f.write('000')
读文件:
在读取的时候,中午和英文类似,在计算机中,都是使用“数字”来表示字符的。
哪个数字对应哪个汉字,其实在计算机中,可以有多个版本。
GBK,UTF8,实际开发的时候,就需要保证,文件内容的编码方式和代码中操作文件的编码方式匹配。代码中是尝试gpk来解析。
#1,使用read来读取文件的内容,指定读几个字符。
f=open('d:/python/text.txt','r',encoding='utf8')
result=f.read(8)
print(result)
f.close()
#2,更常见的需求是,按行来读取。
# 最简单的方法,直接for循环。
f=open('d:/python/text.txt','r',encoding='utf8')
for line in f:
print(f'line={line}')
f.close()
之所以多了个空行,是因为本来读到的文件内容(这一行内容,末尾就带有\n)
此处使用print来打印,又会自动加一个换行符。
可以给print再多设定个参数,修改print自动添加换行的行为。
end参数就表示每次打印之后要在末尾加个啥。
默认是\n,修改成“也就是啥也不加”
上下文管理器:
有时候中间的代码里面,有条件判定,函数返回,抛出异常。会影响关闭。
当with对应的代码块(需要缩进)执行结束,就会自动的执行f的close。
库:
python通过模块来体现“库”
1,降低程序猿的学习成本。
2,提高程序猿的开发效率。
库可以分成两个大类:
1,标准库 python自带的库
2,第三方库,其他的大佬做出来的。
代码案例:
日期计算器。
datetime
1,根据日期构造出datetime的变量。
2,把两个变量进行相减,得到的结果即为所求。
#先构造 datetime变量
import datetime
date1=datetime.datetime(2016,2,4)
date2=datetime.datetime(2023,3,5)
print(date2-date1)
如果datetime别扭,则可以这样
#先构造 datetime变量
from datetime import datetime
date1=datetime(2016,2,4)
date2=datetime(2023,3,5)
print(date2-date1)
也可以这样:
#先构造 datetime变量
import datetime as dt
date1=dt.datetime(2016,2,4)
date2=dt.datetime(2023,3,5)
print(date2-date1)
单词逆序的操作:
例如:I am a student 输出student a am I
在python中,思路是:
1,针对上述字符串,使用空格进行切分,字符串split方法,可以指定分隔符,把字符串分成多个部分,放到一个list里。
2,针对刚才的切分结果列表,进行逆序。
3,再把逆序后的列表,组合起来。(join)
def reverWords(s:str):
#按照' '进行分割。
tokens=s.split(' ')
#将tokens进行逆序。
tokens.reverse()
#以空格分割,加入到tokens中
return ' '.join(tokens)
print(reverWords('I am a student'))
旋转字符串:
给定两个字符串,s和goal,如果若干次旋转操作之后,s能变成goal,那么返回true
例如:s=“abcde”,旋转一次为“bcdea”,再旋转一次为“cdeab”,(把最左侧的字符,给放到最右侧去)
def rotateString(s,goal):
if len(s) != len(goal):
return False
return goal in s+s
print(rotateString('abcde','bcdea'))
统计是给定字符串前缀的字符串数目:
给一个字符串数组,words和一个字符串s,其中word[i]和s只包含小写英文字母。
请你返回words中是字符串s前缀的字符串数目。
遍历words,取出每个字符串。
判定当前这个字符串,是否是s的前缀就行了(s是否以这个字符串开头的)。
例如:words="a,b,c,abc,ab,,bc,ac",s="abc".
def countpPrefixes(words:list,s:str):
count =0
for word in words:
#这是看s是否以words开头
if s.startswith(word):
count+=1
return count
print(countpPrefixes(['a','b','c','abc','ab','bc'],'abc'))
文件查找工具:
#实现文件查找工具
#输入要查找的路径,输入要搜索的文件名(一部分)
#自动的在指定的路径中进行查找
#os.walk只需要使用简单的循环,就可以完成递归遍历的过程,就不必手写代码了
#dirpath :遍历到当前位置,对应的路径是啥。
#dirnames :当前目录下,都有哪些目录,是一个列表,可以包含多个目录名
#filenames :当前目录下,都有哪些文件名,是一个列表,可以包含多个文件名
import os
inputPath=input("请输入要搜索的路径")
pattern=input("请输入要搜索的关键词")
# for dirpath,dirnames,filenames in os.walk(inputPath):
# print(f"dirpath{dirpath}")
# print("dirnames:")
# for name in dirnames:
# print(name)
# print('filenames')
# for name in filenames:
# print(name)
for dirpath,dirnames,filenames in os.walk(inputPath):
for f in filenames:
if pattern in f:
print(f'{dirpath}/{f}')
pip的使用:
使用pip工具,就能直接从pypi上下载你想要的第三方库了。
输入pip,可查看是否安装pip。
二维码生成工具:
二维码本质上,就是一段字符串。
我们可以把任意的字符串,制作成一个二维码。
生活中使用的二维码,更多的是一个URL(网址)
操作excle表:
import xlrd
#1,先打开xlsx的文件。
xlsx=xlrd.open_workbook('d:/python/text.xlsx')
#2,获取到指定的标签页,可以下标,也可以名字
table=xlsx.sheet_by_index(0)
#3,获取到表格中有多少行。
nrows=table.nrows
print(f'nrows={nrows}')
#4,进行循环统计操作
for i in range(1,nrows):
#拿到当前同学的班级id
print('--------------------')
print(table.cell_value(i,0))
print(table.cell_value(i,1))
print(table.cell_value(i,2))
如果求平均值:
import xlrd
#1,先打开xlsx的文件。
xlsx=xlrd.open_workbook('d:/python/text.xlsx')
#2,获取到指定的标签页,可以下标,也可以名字
table=xlsx.sheet_by_index(0)
#3,获取到表格中有多少行。
nrows=table.nrows
print(f'nrows={nrows}')
#4,进行循环统计操作
total=0
count=0
for i in range(1,nrows):
#拿到当前同学的班级id
calssId=table.cell_value(i,1)
if calssId ==100:
total+=table.cell_value(i,2)
count+=1
print(f'平均分:{total/count}')
推荐文章
发表评论