python fiddler txt文件读取 用python读取txt文件_mfc读取txt文件并显示


1.什么是文件

示例如下:


python fiddler txt文件读取 用python读取txt文件_mfc读取txt文件并显示_02


2.文件的作用

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

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

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

使用文件的目的:

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

文件的打开与关闭

想一想:

如果想用word编写一份简历,应该有哪些流程呢?

  1. 打开word软件,新建一个word文件
  2. 写入个人简历信息
  3. 保存文件
  4. 关闭word软件

同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的

  1. 打开文件,或者新建立一个文件
  2. 读/写数据
  3. 关闭文件

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文件。

访问模式:


python fiddler txt文件读取 用python读取txt文件_mfc读取txt文件并显示_03


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,并写入内容,运行效果显示如下:


python fiddler txt文件读取 用python读取txt文件_mfc读取txt文件并显示_04


注意:

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

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错误。


python fiddler txt文件读取 用python读取txt文件_python读取只读word只读_05


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

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月的日历