文件操作:

首先要有一个文件作为对象,例‘文件名’.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. [转]vscode 插件推荐 - 献给所有前端工程师(2019.8.7更新)

    原文地址:https://segmentfault.com/a/1190000006697219 VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给 ...

  2. [转]Maven 全局配置文件settings.xml详解

    原文地址:https://www.jianshu.com/p/110d897a5442 概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置se ...

  3. 带空格的 jquery ID 选择器

    当 DOM ID有一个空格时,如何使用 jquery 的 ID 选择器? 例如,我的 DOM ID 是 <div id="content Module">Stuff&l ...

  4. 002-maven开发Java脚手架archrtype【如无定制开发,请直接看3.3使用】

    一.概述 项目基础构建需要:项目结构,spring框架,orm,连接池,数据库,单元测试等等. 上述即使复用:001-脚手架发展,基础代码结构+mybatis代码生成,基础代码结构,也需要修改成自己单 ...

  5. 【LeetCode算法-27】Remove Element

    LeetCode第27题 Given an array nums and a value val, remove all instances of that value in-place and re ...

  6. JVM 线上故障排查基本操作--内容问题排查

    内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康 ...

  7. ADB命令使用大法

    ​前言 Android开发调试工具ADB的使用.ADB(Android Debug Bridge)是Android SDK中的一个工具, 使用ADB可以直接操作管理Android模拟器或者真实的And ...

  8. [LeetCode] 712. Minimum ASCII Delete Sum for Two Strings 两个字符串的最小ASCII删除和

    Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...

  9. python爬虫3之去哪儿网

    学习任务 获取去哪儿网的出发地列表 获取旅游景点列表 获取景点产品列表 存储数据 1 获取出发地站点 (1)访问touch.qunar.com (2)按F12,单击自由行,在自由行页面点击搜索框 (3 ...

  10. PHP生成短链接方法

    PHP生成短链接方法方法一:新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. API: http://api.t.sina.com.cn/short_url/ ...