阅读目录

一、文件操作

1、介绍

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

#1、打开文件,得到文件句柄并赋值给一个变量
#2、通过句柄对文件进行操作
#3、关闭文件

代码如下:

f=open('朱锐',encoding='utf-8') #python3默认是utf-8编码,但是新建文件追随的系统编码,需要通过encoding转变成utf-8
data=f.read()
print(data)
f.close()

2、在python中

#1. 打开文件,得到文件句柄并赋值给一个变量
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作
data=f.read() #3. 关闭文件
f.close()

3、f = open('file.txt','r')的过程分析

#1、由应用程序向操作系统发起系统调用open(...)
#2、操作系统打开该文件,并返回一个文件句柄给应用程序
#3、应用程序将文件句柄赋值给变量f

二、打开文件的模式

文件句柄 = open('文件路径','模式')
#1、打开文件的模式有(默认文本模式)
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w ,只写模式【不可读,文件不存在则创建,存在则清空内容】
a , 追加模式【不可读,不存在则创建,存在则只追加内容】 #2、对于非文本文件,我们只能使用b模式,'b'表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jpg格式、视频文件的avi格式)
rb
wb
ab
注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3、了解部分
"+" 表示可以同时读写某个文件
r+:读写【可读,可写】
w+:写读【可读,可写】
a+:写读【可读,可写】 x,只写模式【不可读;不存在则创建,存在则报错】
x+ ,写读【可读,可写】
xb

三、操作文件的方法

文件处理常用的读操作:

# f=open('朱锐',encoding='utf-8')
# data=f.read()
# print(data)
# f.close() #打开文件的模式(r w a)
# f=open('朱锐','r',encoding='utf-8')
# # data=f.read()
# # print(data)
# print(f.readable()) #判断文件是否是读的处理方式
#
# f=open('朱锐','w',encoding='utf-8')
# # data=f.read()
# # print(data)
# print(f.writable()) #判断文件是否是写的处理方式 file=open('readline',encoding='utf-8')
print('第1行',file.readline(),end='') #后面加end为空,取消换行
print('第2行',file.readline())
print('第3行',file.readline())
print('第4行',file.readline())
print('第5行',file.readline())
print('第6行',file.readline())
print('第7行',file.readline())
print('第8行',file.readline())
print('第9行',file.readline())
输出结果:
C:\Python35\python3.exe G:/python_s3/day16/文件处理.py
第1行 111111111111111111111
第2行 222222222222222222222 第3行 333333333333333333333 第4行 44444444444444444444 第5行 54545 第6行 454564641111111111111 第7行 333333333333343532236236

文件处理写操作:

f=open('朱锐','w',encoding='utf8')
f.write('23456789\n')
f.write('1233489087766\n')
f.write('33334444333\n')
f.write('1233\n')
f.writelines(['555\n','6666\n']) #文件内容只能是字符串,只能写字符串
f.write(3)
f.close()

文件处理追加操作:

f=open('朱锐','a',encoding='utf-8')
f.write('写到文件最后')

文件处理其他模式操作:

文件处理其他操作:
f=open('xxx','r+',encoding='gbk')
# data=f.read()
# print(data)
# f.write('123sb') f.write('sb') #文件修改
src_f=open('xxx','r',encoding='gbk')
data=src_f.readlines()
src_f.close() # for i in data:
# print(i)
print(data)
dst_f=open('xxx','w',encoding='gbk')
# dst_f.writelines(data)
dst_f.write(data[0])
dst_f.close() with open('a.txt','w') as f: #with方式打开文件,不用再加close关闭
f.write('1111\n') src_f=open('xxx','r',encoding='gbk')
dst_f=open('xxx','w',encoding='gbk')
with open('xxx','r',encoding='gbk') as src_f,\
open('xxx_new','w',encoding='gbk') as dst_f:
data=src_f.read()
dst_f.write(data) f=open('a.txt')
print(f.encoding) #查看文件编码

四、文件内光标移动

1、read(3):

1、文件打开方式为文本模式,代表读取3个字符
2、文件打开方式为b模式,代表读取3个字符

2、其余的文件内光标移动都是以字节为单位,如:seek,tell,truncate

注意:
1、seek有三种方式0,1,2 其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的 2、truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
#基于seek实现tail -f功能
import time
with open('test','rb') as f:
f.seek(0,2)
while True:
line=f.readline()
if line:
print(line.decode('utf-8'))
else:
time.sleep(0.2)
f=open('日志文件','rb')
for i in f:
offs=-10
while True:
f.seek(offs,2)
data=f.readlines()
if len(data) > 1:
print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
break
offs*=2

Python之路【第五篇】:Python基础之文件处理的更多相关文章

  1. Python之路(第五篇) Python基本数据类型集合、格式化、函数

    一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...

  2. python之路第五篇之模块和加密算法(进阶篇:续)

    模块 Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module) 简单地说,模块就是一个保存了Python代码的文件. 模块分类: 1)内置模块 2)自 ...

  3. 【Python之路】第九篇--Python基础之线程、进程和协程

    进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...

  4. python之路第五篇之装饰器:(进阶篇)

    装饰器: 学前必备知识: def f1(): print "f1" f1() #表示函数执行 f1 #表示函数,指向内存地址 f1 = lambda x: x + 1 f1() # ...

  5. Python之路第五天,基础(6)-模块

    模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...

  6. Python之路第五天,基础(5)-序列化和字符串格式化

    序列化 Python中用于序列化的两个模块 json 用于『字符串』和『python基本数据类型』间进行转换 pickle 用于『python特有的类型』和『python基本数据类型』间进行转换 js ...

  7. python之路第五篇之递归(进阶篇:续:经典例子剖析)

    递归 在函数内部,可以调用其他函数; 如果一个函数在内部调用自身本身,这个函数就是递归函数. 例如,我们来计算阶乘: n! = 1 x 2 x 3 x ... x n, 用函数f1(n)表示,可以看出 ...

  8. python之路第四篇(基础篇)

    一.冒泡算法实现: 方法一: li = [13,33,12,80,66,1] print li for m in range(4): num1 = li[m] num2 = li[m+1] if nu ...

  9. 【Python之路】第一篇--Linux基础命令

    pwd 命令 查看”当前工作目录“的完整路径 pwd -P # 显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径 .   表示当前目录 ..  表示上级目录 /  表示根目录 ls ...

  10. Python之路(第八篇)Python内置函数、zip()、max()、min()

    一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回t ...

随机推荐

  1. PAT1133:Splitting A Linked List

    1133. Splitting A Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  2. meta 元标签的常用用法

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  3. Spring Security-- 验证码功能的实现

    spring security4 添加验证码 http://www.itwendao.com/article/detail/165400.html http://www.itdadao.com/art ...

  4. 写完批处理脚本,再写个Gradle脚本,解放双手

    前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradl ...

  5. 关于maven的配置使用 这一篇还比较全 2017.12.13

    https://www.cnblogs.com/tangshengwei/p/6341462.html

  6. 『个人の笔记』百度ife

    ✄--------------------------------------------task1分割线--------------------------------------------✄ 百 ...

  7. ASP.NET Core Identity Hands On(1)——Identity 初次体验

    ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格.登录和用户数据存储 这是来自于 ASP.NET Core Identity 仓 ...

  8. Java 学习笔记 (七) Java 参数

    head first java page 74 实参: argument 形参: parameter 方法会运用形参, 调用的一方会传入实参. 实参是传给方法的值.当它传入方法后就成了形参, 参数跟局 ...

  9. BZOJ_1003_[ZJOI2006]物流运输_最短路+dp

    BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...

  10. vue iview UPload,但文件上传是,clearFiles的使用方法

    <template> <div> <button @click="clearUploadedImage">重新上传</button> ...