文件操作:

首先要有一个文件作为对象,例‘文件名’.txt

1.文件路径:例 d:\文件名.txt

<1>:绝对路径:从根目录往后的路径

<2>:相对路径:当前目录下的路径有什么算什么

2.编码方式:UTF-8、GBK2312等

3.操作模式:只读、只写、追加、写读、读写等

文件是以什么变法方式储存就要以什么编码方式打开

f = open('目标文件',mode='r',encoding='utf-8')  #以UTF-8编码的文件为例
content = f.read()
print(content)
f.close()

读:

1.mode = 'r'文件的默认读取方式

f.read() 文件打开后将bytes类型转化为str类型,返回值是str,Python3下的编码方式是unicode,

f2 = open('f:\目标文件.txt',mode='r',encoding='gbk')  #打开的文件编码是gbk
content2 = f2.read()
print(content2) #asd123文件
f2.close()

2.mode = 'rb'主要用于非文字类型文件操作,不用写编码方式

3.先读后写

f = open('目标文件',mode='r+',encoding='utf-8')
print(f.read()) #
f.write('abcd123')
f.close() #123456789abcd123

在f.write()后添加一个print(f.read()) ,这段代码并不会执行

在r+模式下进行写读,写了多少就会覆盖多少

#原文件内容:123456789
f = open('目标文件',mode='r+',encoding='utf-8')
f.write('abcdefg')
print(f.read()) #
f.close()

4.mode = 'r+b' 以bytes类型打开

#原文件内容:123456789
f = open('目标文件',mode='r+b')
print(f.read()) #b'123456789'
f.write('abc'.encode('utf-8'))
f.close() #文件更新后:123456789abc 以utf-8编码

写:

在写入一个文件时若没有就会创建一个新的文件,有则将原文件删除再添加新的文件

1.只读 mode = 'w'

#原文件内容:123456789
f = open('目标文件',mode='w',encoding='utf-8')
f.write('abcdefg')
f.close() #文件更新后:abcdefg

2.mode = 'wb'

#原文件内容:123abc中国
f = open('目标文件',mode='wb')
f.write('gbka123'.encode('utf-8'))
f.close() #文件更新后:gbka123 编码方式:utf-8

如果再以gbk编码方式去读取这个文件那么将报错

3.mode = 'w+' 先写后读

#原文件内容:123abc中国
f = open('目标文件',mode='w+',encoding='utf-8')
f.write('gbk2312')
print(f.read())
f.close() #文件更新后:gbk2312 编码方式:utf-8

4.mode = 'w+b' 

f1 = open('logo-grey.png',mode='rb')
content = f1.read()
print(content)
f1.close()
f2 = open('logo-grey2.png',mode='wb')
f2.write(content)
f2.close()

将原文件以rb形式读出来再写入到一个新的文件中去

追加:

1.mode = 'a'

#原文件内容:123abc中国
f = open('目标文件',mode='a',encoding='utf-8')
f.write('%%%%')
f.close() #文件更新后:123abc中国%%%% 编码方式:utf-8

2.mdoe = 'a+'

#原文件内容:123abc中国
f = open('目标文件',mode='a+',encoding='utf-8')
f.write('%%%%')
print(f.read())
f.close() #文件更新后:123abc中国%%%% 编码方式:utf-8

其他功能:

1.f.read(n)

  当文件打开的方式为文本模式时,代表读取n个字符

#原文件内容:123abc中国
f = open('目标文件',mode='r',encoding='utf-8')
content = f.read(6)
print(content)
f.close() #123abc

  当文件打开为b模式时,代表读取n个字节

f = open('logo-grey.png',mode='rb')
content = f.read(10)
print(content)
f.close() #b'\x89PNG\r\n\x1a\n\x00\x00'

2.f.seek(光标位置)

seek(n)光标移动到n位置,移动的单位为byte,所有utf-8编码的中文部分必须是3的倍数

移动到开头:seek(0)

移动到结尾:seek(0,2) seek最后一个参数表示从哪个位置进行偏移,1表示前位置,2表示结尾

#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
f.seek(0) #将光标置于开头
print(f.read())
f.seek(0) #将光标置于开头
f.seek(0,2) #将光标置于结尾
print(f.read()) #读到空白
f.seek(0)
f.write('随便')
f.flush() #文件更新后:随便中国 3*2 = 6 byte
f.close()

3.f.tell()

告诉我们光标在什么位置

#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
f.seek(0) #将光标置于开头
print(f.tell()) #
print(f.read())
f.seek(0) #将光标置于开头
print(f.tell()) #
f.seek(0,2) #将光标置于结尾
print(f.tell()) #
print(f.read()) #读到空白
f.seek(0)
print(f.tell())
f.write('随便')
f.flush() #文件更新后:随便中国 3*2 = 6 byte
print(f.tell()) #
f.close()

4.f.readable()&f.writeable() 判断是否可读

#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
print(f.readable())
print(f.writable())
f.close()

5.f.readline()

每次只读一行,读取后的数据都有一个'\n',原文件内容不会发生改变

#原文件内容:  
#
# abc
# gb2
#
# asd
import os
li = []
f = open('目标文件',mode='r+',encoding='utf-8')
while f.tell() != os.path.getsize('目标文件'):
li.append(f.readline().strip())
f.close()
print(li) #['123', 'abc', 'gb2', '456', 'asd']

6.f.readlines()

返回一个列表,列表中的元素是原文件的每一行,文件如果过大,占内存且容易崩盘

#原文件内容:
#
# abc
# gb2
#
# asd
f = open('目标文件',mode='r+',encoding='utf-8')
print(f.readlines()) #['123\n', 'abc\n', 'gb2\n', '456\n', 'asd']
f.close()

7.f.truncate()

对原文件进行截取数据,0则全删 以byte为单位截取

#原文件内容:123456abcd
f = open('目标文件',mode='r+',encoding='utf-8')
f.truncate(4)
print(f.read()) #
f.close()

8.for循环

文件句柄是一个迭代器,每一次的循环只在内存中占一行数据,非常节省内存

#原文件内容:
#
# abc
# gb2
#
# asd
f = open('目标文件',mode='r+',encoding='utf-8')
for i in f:
print(i,end = '')
f.close()
# 打印内容
#
# abc
# gb2
#
# asd

9.修改文件

# 原文件内容:
#
# abc
# gb2
#
# asd
#
with open('目标文件',encoding='utf-8') as f1,open('目标文件.bak','w',encoding='utf-8') as f2:
for line in f1:
if '' in line:
line = line.replace('','hello world!')
f2.write(line)
# 文件修改后内容:
# hello world!
# abc
# gb2
#
# asd
# hello world!
import os
os.remove('目标文件') #删除文件
os.replace('目标文件.bak','目标文件') #重命名

10.文件打开的另一种办法

with open('目标文件',mode='r',encoding='utf-8') as f:
print(f.read())

多个文件操作:

with open('目标文件',mode='r',encoding='utf-8') as f1,\
open('目标文件2',mode='w',encoding='utf-8') as f2:
print(f1.read())
f2.write('something')

Python学习日记(七) 文件操作的更多相关文章

  1. python学习日记(文件操作练习题)

    登录注册(三次机会) name = input('请注册姓名:') password = input('请注册密码:') with open('log',mode='w',encoding='utf- ...

  2. Python学习日记之文件读取操作

    Python内置了文件读写的函数open,read 用法示例: open('/home/root/files.txt ') 在打开文件后,操作完成后可以使用close()关闭文件,但比较好的文件读写方 ...

  3. Python学习:7.文件操作

    文件操作 我们曾将听过一个问题,将大象放入冰箱分为三步:1.打开冰箱门,2.将大象放进去,3.关上冰箱门.今天我们要讲的Python文件操作的步骤就像将大象放入冰箱的步骤一样. 使用Python操作文 ...

  4. 【Python学习之六】文件操作

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.文件的打开与关闭 使用open函数,可以打开一 ...

  5. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  6. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  7. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  8. python学习第十八天 --文件操作

    这一章节主要讲解文件操作及其文件读取,缓存,文件指针. 文件操作 (1)文件打开:open(filepath,filemode) filepath:要打开文件的路径 filemode:文件打开的方式 ...

  9. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

随机推荐

  1. ListView中嵌入布局的Button或多个点击事件

    有时候在ListView嵌入的布局中有多个事件需要点击,比如一个item中有TextView和Button两个布局,当我们需要获取这两个点击事件时,我们应该如何去获取呢,通常来说,我们都是已经固定好了 ...

  2. MacOS Laravel 安装教程

    一.到官网选择 Laravel 版本 根据个人的喜好选择安装的版本,我选择的是 5.8 https://laravel.com/docs/5.8/installation 以下是 Laravel 5. ...

  3. Sword 第三方库介绍二

    /* uuid生成 */ #include <stdio.h> #include <stdlib.h> /* calloc()函数头文件 */ #include <ass ...

  4. 史上最全的 DB2 错误代码大全

    1 前言 作为一个程序员,数据库是我们必须掌握的知识,经常操作数据库不可避免,but,在写 SQL 语句的时候,难免遇到各种问题.例如,当我们看着数据库报出的一大堆错误时,是否有种两眼发蒙的感觉呢?咳 ...

  5. NazoHell 攻略

    http://hell.one-story.cn/hell-start.html Level 0: http://nazohell.one-story.cn/nazohell-start.html 跳 ...

  6. Docker 安装 redis 并实现配置文件启动,数据文件本地持久化

    1,笔者使用的是 Linux 的 Centos7 版本  2,安装 Docker,不会安装可以移步 Docker 在 Linux 平台的安装 以及一些常见命令 3,下载 docker 镜像 3.1,首 ...

  7. js 类型判断

  8. [LeetCode] 250. Count Univalue Subtrees 计算唯一值子树的个数

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  9. 编写max(list) 返回列表最大元素

    defmodule MyList do def max(list), do: _max(list, 0) defp _max([], max), do: max defp _max([head | t ...

  10. CentOS 7.5二进制部署Kubernetes1.12(加密通信)(五)

    一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...