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. C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性

    系列目录     [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取单文件/模型下单个构建的属性信息. 请求地址:GET https://api.bimface.com/data/v2/fil ...

  2. 安装python的第三方库pillow

    参考:http://jingyan.baidu.com/article/ff42efa929e6c8c19f220254.html 用Python做图像处理时,需要用到PIL(图像处理库).但是PIL ...

  3. CodeForces 780 E Underground Lab

    Underground Lab 题解: 如果遍历一棵树,我们可以发现最多需要走的步数也不会超过2 * n步. 所以我们选出一棵树,然后遍历一边这颗树. 然后把序列分成k块就好了. 代码: #inclu ...

  4. codeforces 465 C. No to Palindromes!(暴力+思维)

    题目链接:http://codeforces.com/contest/465/problem/C 题意:给出一个不存在2个或以上回文子串的字符串,全是由小写字母组成而且字母下表小于p,问刚好比这个字符 ...

  5. MySql连接笔记

    一.内连接查询  inner join 关键字:inner  join   on 语句:select * from a_table a inner join b_table b on a.a_id = ...

  6. [淘宝客技术篇008](无需登录)淘宝天猫优惠券JSON接口1

    今天,小星给大家分享的是一个非常重要,非常有意义的接口:获取淘宝天猫优惠券的JSON接口. 先上个链接: http://uland.taobao.com/cp/coupon_list?pid=mm_2 ...

  7. 用Python分析2000款避孕套,得出这些有趣的结论

    到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是: 第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端. 第二篇:淘宝自动登录2.0,新增Cookies序列化, ...

  8. JAVA面试问题与解答(1-15)

    Q1.内部类和子类之间有什么区别? Ans:Inner类是嵌套在另一个类中的类.内类具有嵌套它的类的访问权限,并且它可以访问外部类中定义的所有变量和方法. 子类是从另一个名为super class的类 ...

  9. Flink 从 0 到 1 学习 —— 如何自定义 Data Sink ?

    前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...

  10. 39 (OC) 瀑布流、不规则UI

    39  (OC)  瀑布流.不规则UI