python软件进行文件的操作步骤_Python从入门到就业之文件操作

1.什么是文件

示例如下:

2.文件的作用

大家应该听说过一句话:“好记性不如烂笔头”。

不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”

可见,在把数据存储起来有做么大的价值

使用文件的目的:就是把一些存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力

文件的打开与关闭

想一想:如果想用word编写一份简历,应该有哪些流程呢?打开word软件,新建一个word文件

写入个人简历信息

保存文件

关闭word软件

同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的打开文件,或者新建立一个文件

读/写数据

关闭文件

1.打开文件

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

open(文件路径,访问模式)

示例如下:

f = open('test.txt', 'w')

说明:

文件路径

文件的路径分为相对路径和绝对路径两种。绝对路径:指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的。例如:C:/Users/chris/AppData/Local/Programs/Python/Python37/python.exe,从电脑的盘符开始,表示的就是一个绝对路径。

相对路径:是从当前文件所在的文件夹开始的路径。test.txt,是在当前文件夹查找 test.txt 文件

./test.txt,也是在当前文件夹里查找test.txt文件, ./ 表示的是当前文件夹。

../test.txt,从当前文件夹的上一级文件夹里查找 test.txt 文件。 ../ 表示的是上一级文件夹

demo/test.txt,在当前文件夹里查找 demo这个文件夹,并在这个文件夹里查找 test.txt文件。

访问模式:

2.关闭文件

close( )

示例如下:

# 新建一个文件,文件名为:test.txt

f = open('test.txt', 'w')

# 关闭这个文件

f.close()

文件的读写

1.写数据(write)

使用write()可以完成向文件写入数据

demo: 新建一个文件 file_write_test.py,向其中写入如下代码:

f = open('test.txt', 'w')

f.write('hello world, i am here!\n' * 5)

f.close()

运行之后会在file_write_test.py文件所在的路径中创建一个文件test.txt,并写入内容,运行效果显示如下:

注意:如果文件不存在,那么创建;如果存在那么就先清空,然后写入数据

2.读数据(read)

使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据

demo: 新建一个文件file_read_test.py,向其中写入如下代码:

f = open('test.txt', 'r')

content = f.read(5) # 最多读取5个数据

print(content)

print("-"*30) # 分割线,用来测试

content = f.read() # 从上次读取的位置继续读取剩下的所有的数据

print(content)

f.close() # 关闭文件,这个可是个好习惯哦

运行现象:

hello

------------------------------

world, i am here!

注意:如果用open打开文件时,如果使用的"r",那么可以省略 open('test.txt')

3.读数据(readline)

readline只用来读取一行数据。

f = open('test.txt', 'r')

content = f.readline()

print("1:%s" % content)

content = f.readline()

print("2:%s" % content)

f.close()

4.读数据(readlines)

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行为列表的一个元素。

f = open('test.txt', 'r')

content = f.readlines()

print(type(content))

for temp in content:

print(temp)

f.close()

指针定位tell() 方法用来显示当前指针的位置

f = open('test.txt') print(f.read(10)) # read 指定读取的字节数 print(f.tell()) # tell()方法显示当前文件指针所在的文字 f.close()

seek(offset,whence) 方法用来重新设定指针的位置。offset:表示偏移量

whence:只能传入012中的一个数字。0表示从文件头开始

1表示从当前位置开始

2 表示从文件的末尾开始

f = open('test.txt','rb') # 需要指定打开模式为rb,只读二进制模式 print(f.read(3)) print(f.tell()) f.seek(2,0) # 从文件的开头开始,跳过两个字节 print(f.read()) f.seek(1,1) # 从当前位置开始,跳过一个字节 print(f.read()) f.seek(-4,2) # 从文件末尾开始,往前跳过四个字节 print(f.read()) f.close()

应用:制作文件的备份

任务描述输入文件的名字,然后程序自动完成对文件进行备份

参考代码

# 提示输入文件

file_name = input("请输入要拷贝的文件名字:")

# 以读的方式打开文件

old_file = open(file_name, 'rb')

# 分割文件名和后缀名

file_names =file_name.rsplit('.', maxsplit=1)

# 组织新的文件名字

new_file_name = file_names[0] + '.bak.'+file_names[1]

# 创建新文件

newFile = open(new_file_name, 'wb')

# 把旧文件中的数据,一行一行的进行复制到新文件中

for lineContent in old_file.readlines():

newFile.write(lineContent)

# 关闭文件

old_file.close()

newFile.close()

异常的概念

程序在运行过程中,由于我们的编码不规范,或者其他原因一些客观原因,导致我们的程序无法继续运行,此时,程序就会出现异常。如果我们不对异常进行处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们在程序设计里提出了异常处理这个概念。

本次只是让大家初步体验一下异常,以及异常的简单处理,后续关于异常,我们还会再次深入学习。

读取文件异常

在读取一个文件时,如果这个文件不存在,则会报出FileNotFoundError错误。

程序在运行过程中会经常遇到类似的异常,如果我们不进行处理,此时程序就会中断并退出。为了提高程序的健壮性,我们可以使用异常处理机制来解决程序运行过程中可能出现的问题。

try...except语句

try...except语句可以对代码运行过程中可能出现的异常进行处理。 语法结构:

try:

可能会出现异常的代码块

except 异常的类型:

出现异常以后的处理语句

示例:

try:

f = open('test.txt', 'r')

print(f.read())

except FileNotFoundError:

print('文件没有找到,请检查文件名称是否正确')

练习:

让用户任意输入两个数字,再让用户选择算数运算符,最后让用户输入的两个数字进行算数运算,并输出结果。 要求:如果用户输入的内容不是数字,需要提示用户重新输入

如果用户做了除以0的操作,提示用户不能除以0

参考代码:

def get_num(msg):

num = input(msg)

try:

num = float(num)

except ValueError:

print("您输入的数字不合法,请重新输入")

get_num(msg)

else:

return num

def get_operator():

operator = input('请选择运算符\n 1:加法 2:减法 3:乘法 4:除法 \n')

if operator != '1' and operator != '2' and operator != '3' and operator != '4':

get_operator()

else:

return operator

def do_cal(a, b, p):

if p == '1':

return a + b

elif p == '2':

return a - b

elif p == '3':

return a * b

elif p == '4':

try:

result = a / b

except ZeroDivisionError:

return '对不起,除数不能为0'

else:

return result

else:

return '对不起,不支持的运算符'

while True:

num1 = get_num("请输入一个数字\n")

num2 = get_num('请再输入一个数字\n')

operator = get_operator()

result = do_cal(num1, num2, operator)

print('计算的结果是:{}'.format(result))

print('#############################')

内置模块的使用

Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。这些模块提供了丰富的功能,可以直接使用相应的模块来快速实现相应的功能。

下面我们就介绍一些工作中常见的模块:random模块

math模块

os模块

time模块

datetime模块

calendar模块

不管是使用哪个内置模块,都需要先使用关键字 import 将相应的模块先行导入才能使用。

random模块

random 模块主要用于生成随机数或者从一个列表里随机获取数据。

print(random.random()) # 生成 [0,1)的随机浮点数

print(random.uniform(20, 30)) # 生成[20,30]的随机浮点数

print(random.randint(10, 30)) # 生成[10,30]的随机整数

print(random.randrange(20, 30)) # 生成[20,30)的随机整数

print(random.choice('abcdefg')) # 从列表里随机取出一个元素

print(random.sample('abcdefghij', 3)) # 从列表里随机取出指定个数的元素

math模块

math模块保存了数学计算相关的方法,可以很方便的实现数学运算。

import math

print(math.fabs(-100)) # 取绝对值

print(math.ceil(34.01)) #向上取整

print(math.factorial(5)) # 计算阶乘

print(math.floor(34.98)) # 向下取整

print(math.pi) # π的值,约等于 3.141592653589793

print(math.pow(2, 10)) # 2的10次方

print(math.sin(math.pi / 6)) # 正弦值

print(math.cos(math.pi / 3)) # 余弦值

print(math.tan(math.pi / 2)) # 正切值

OS模块

在Python开发中,经常会涉及到大量的文件和路径操作,此时就需要使用os模块。

import os

os.getcwd() # 获取当前的工作目录,即当前python脚本工作的目录

os.chdir('test') # 改变当前脚本工作目录,相当于shell下的cd命令

os.rename('毕业论文.txt','毕业论文-最终版.txt') # 文件重命名

os.remove('毕业论文.txt') # 删除文件

os.rmdir('demo') # 删除空文件夹

os.removedirs('demo') # 删除空文件夹

os.mkdir('demo') # 创建一个文件夹

os.chdir('C:\\') # 切换工作目录

os.listdir('C:\\') # 列出指定目录里的所有文件和文件夹

os.name # nt->widonws posix->Linux/Unix或者MacOS

os.environ # 获取到环境配置

os.environ.get('PATH') # 获取指定的环境配置

os.path.abspath(path) # 获取Path规范会的绝对路径

os.path.exists(path) # 如果Path存在,则返回True

os.path.isdir(path) # 如果path是一个存在的目录,返回True。否则返回False

os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False

os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回

time模块

print(time.time()) # 获取从1970-01-01 00:00:00 UTC 到现在时间的秒数

print(time.strftime("%Y-%m-%d %H:%M:%S")) # 按照指定格式输出时间

print(time.asctime()) #Mon Apr 15 20:03:23 2019

print(time.ctime()) # Mon Apr 15 20:03:23 2019

print('hello')

print(time.sleep(10)) # 让线程暂停10秒钟

print('world')

datetime模块

print(datetime.datetime.now()) # 2019-04-15 20:09:05.190113

print(datetime.datetime.now().replace(year=2020)) # 2020-04-15 20:12:37.832657

print(datetime.datetime.now()+datetime.timedelta(weeks=1)) # 2019-04-22 20:11:56.399726

calendar模块

calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码。周一到周日分别对应 0 ~ 6

calendar.firstweekday()# 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。

c = calendar.calendar(2019) # 生成2019年的日历,并且以周日为其实日期码

print(c) #打印2019年日历

print(calendar.isleap(2000)) # True.闰年返回True,否则返回False

count = calendar.leapdays(1996,2010) # 获取1996年到2010年一共有多少个闰年

print(calendar.month(2019, 3)) # 打印2019年3月的日历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值