1. 文件操作介绍

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

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

在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示

 

2. 文件的读写

文件的读写其实主要分几个部分,文本文件、二进制文件(图片音频视频)、JSON文件,操作上大同小异

示例:

import time
def main():
f = open('F://a.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
# 一次性读取整个文件的内容
with open("F://a.txt","r",encoding='utf-8') as f:
print(f.read()) # 通过for-in循环逐行读取
with open("F://a.txt",mode="r") as f:
for line in f:
print(line,end="") # 读取文件按行读取到列表中
with open("F://a.txt","r",encoding='utf-8') as f:
lines = f.readlines()
print(lines) if __name__ == "__main__":
main()

注:通过with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,无须在 finally 关闭文件流

 

2.1 文本文件

要将文本信息写入文件文件也非常简单,在使用open函数时指定好文件名并将文件模式设置为'w'即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为'a'。下面的例子演示了如何将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。

from math import sqrt
#是否是素数
def is_prime(n):
"""判断素数的函数"""
assert n > 0
for x in range(2,int(sqrt(n)) + 1):
if n % x == 0:
return False return False if n == 1 else True def main():
filenames = ('F://a.txt',"F://b.txt","F://c.txt")
fs_list = []
try:
for f in filenames:
fs_list.append(open(f,"w",encoding='utf-8')) for number in range(1,10001):
if is_prime(number):
if number < 100:
print("1:",number)
fs_list[0].write(str(number) + '\n')
elif number < 1000:
print("2:",number)
fs_list[1].write(str(number) + '\n')
else:
print("3:",number)
fs_list[2].write(str(number) + '\n')
except Exception as e:
print(e)
finally:
for fs in fs_list:
fs.close()
print("操作完成") if __name__ == '__main__':
main()

 

2.2 二进制文件

了解完文本文件的操作,二进制文件的读写复制也几乎差不多

"""
读写二进制文件
version:0.1
author:coke
"""
def main():
try:
with open("F://aa.jpg","rb") as f1:
data = f1.read()
print(type(data))
with open("F://bb.jpg","wb") as f2:
f2.write(data)
except Exception as e:
print(e) if __name__ == "__main__":
main()

 

2.3 JSON文件

我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。

"""
读取json文件
version:0.1
author:coke
"""
import json
def main():
mydict = {
'name': 'coke',
'age':'19',
'qq':623105972,
'friends':['David','Jack'],
'cars':[
{"brand":"BYD","max_speed":"180"},
{"brand":"BM","max_speed":"190"}
]
}
try:
with open("F://data.json","w",encoding='utf-8') as fs:
json.dump(mydict,fs)
except IOError as e:
print(e)
print("保存数据完成") if __name__ == '__main__':
main()

json模块主要有四个比较重要的函数,分别是:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象
import requests
import json
def main():
resp = requests.get("http://api.tianapi.com/guonei/?key=APIKey&num=10")
data_model = json.loads(resp.text)
print(data_model)
print(data_model['code'])
print(data_model['msg']) if __name__ == '__main__':
main()

 

3. 文件的定位,重命名和删除

在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取

如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()

seek(offset, from)有2个参数

  • offset:偏移量
  • from:方向
    • 0:表示文件开头
    • 1:表示当前位置
    • 2:表示文件末尾

os模块中的rename()可以完成对文件的重命名操作,remove()可以完成对文件的删除操作

# -*- coding:utf-8 -*-
"""
文件的定位读写
version:0.1
author:coke
"""
import os
f = open("F://a.txt","r")
str = f.read(2)
print(str) #查找当前位置
position = f.tell()
print("当前位置:",position) str = f.read(3)
print(str) #查找当前位置
position = f.tell()
print("当前位置:",position) f.seek(1,0)
position = f.tell()
print("seek完当前位置:",position)
f.close()
#关闭文件流才可以 进行重命名和删除
os.rename("F://a.txt","F://rename.txt")
os.remove("F://b.txt")

 

4. 文件夹的相关操作

实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等

就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块

import os
from time import sleep
#创建文件夹
if not os.path.exists("F://tempDir"):
os.mkdir("F://tempDir")
#获取当前目录
currentDir = os.getcwd()
print(currentDir)
print("--------------")
#改变默认目录
os.chdir("F://")
#获取默认目录
defaultDir = os.listdir("./")
print(defaultDir)
#过5秒删除文件
sleep(5)
os.rmdir("F://tempDir")

Python集训营45天—Day08 (文件操作)的更多相关文章

  1. Python集训营45天—Day04 (函数)

    目录 1. 函数介绍 2. 函数的参数 3. 模块与函数 4. 递归函数 5. 匿名函数 6. 多返回值 python 的学习已经进入到第四天,前面几章我们已经学会了基本的变量操作,以及分支结构和循环 ...

  2. Python集训营45天—Day01

    目录 1. Python简介 2. 第一个Python程序 3. 知识点梳理 序言:未来是数据的世界,而python 是一门可以高效简洁处理数据的语言,博主打算花45天左右完成python学习的从0到 ...

  3. Python集训营45天—Day03

    目录 1. 分支结构 1.1 初步介绍 1.2 使用案例 1.3 练习 2.循环结构 1.1 初步介绍 1.2 使用案例 1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行 ...

  4. Python集训营45天—Day02

    目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...

  5. Python集训营45天—Day07 (面向对象编程进阶)

    目录 1. @property装饰器 2. 魔法方法 3. 类属性和实例属性 4.静态方法和类方法 5. 单继承和多继承 6. 多态 7. del 方法 序言:上个章节我们了解了面向对象的基础知识,这 ...

  6. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  7. day08——文件操作

    day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...

  8. Python基础(六) 基础文件操作

    今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个 ...

  9. python基础(内置函数+文件操作+lambda)

    一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...

随机推荐

  1. KVC&KVO&运行时

    运行时:要先了解程序运行的三个阶段 1.编译阶段:clang将OC代码转换成C++,查看运行机制调用的方法 2.链接阶段:与我们使用到得库文件进行链接 3.运行阶段:我们要谈的运行时主要针对这个阶段, ...

  2. poj 2777 Count Color(线段树(有点意思))

    题目链接 http://poj.org/problem?id=2777 题意:题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位 ...

  3. 用深度学习技术FCN自动生成口红

    1 这个是什么?        基于全卷积神经网络(FCN)的自动生成口红Python程序. 图1 FCN生成口红的效果(注:此两张人脸图来自人脸公开数据库LFW) 2 怎么使用了?        首 ...

  4. ASP.NET Core 3.0 迁移避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...

  5. 【Spring】 AOP Base

    1. AOP概述 2. AOP的术语: 3. AOP底层原理 4. Spring 中的AOP 4.1 概述 4.2 分类 4.3 Spring的传统AOP 针对所有方法的增强:(不带有切点的切面) 带 ...

  6. 手写RPC框架指北另送贴心注释代码一套

    Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的.所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架. 完整代码以及 ...

  7. Net基础篇_学习笔记_第十二天_面向对象继承(父类和子类)

    继承 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类.Student.Teacher.Driver 子类  派生类Person         ...

  8. Winform中使用DevExpress时给控件添加子控件的方法

    场景 在WInform中使用DevExpress时经常使用PanelControl控件用来进行布局设计,因此需要在代码中生成控件并添加子控件. 实现 一种是设置要添加的自控件的Parent属性为容器控 ...

  9. HIve实战分析Hadoop的日志

    1.日志格式分析首先分析 Hadoop 的日志格式, 日志是一行一条, 日志格式可以依次描述为:日期.时间.级别.相关类和提示信息.如下所示: -03-06 15:23:48,132 INFO org ...

  10. ios 把数组对象转成json字符串存起来

    1第一步是我们获取数据源 一般我们都是从接口请求数据 NSArray *subColumnsArray = nil; NSDictionary *dict = [NSJSONSerialization ...