文件操作:

首先要有一个文件作为对象,例‘文件名’.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. MySQL中的比较操作符<=>

    对于=操作符,两个值被比较,结果是0(不相等)或者1(相等). 比较操作符<=>表示NULL安全的等价.这个比较操作符执行等价比较,和=操作符类似,但是如果两个操作数都是NULL,会返回1 ...

  2. EOS 数据库RAM使用量的计算

    如果你是EOS的合约开发者,相信你很有可能跟我一样对内存(RAM)的使用量感到不解.在使用multi_index进行数据存储时,明明只存了一点数据,但区块链浏览器中显示的内存占用量却上升了不少.在这篇 ...

  3. 【449】backup get weekly tweets

    import pandas as pd from datetime import datetime fn = r"D:\OneDrive - UNSW\tweets_flu.csv" ...

  4. [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  5. ingress Whitelisting白名单机制

    Whitelisting To restrict the service in a way that only a list of IPs can access it, modify the ingr ...

  6. idea创建maven web项目需要注意的一些细节

    在idea中构建maven java web项目,从new project到选择maven骨架到最后finish完成,整个流程完成后,项目基本结构已经出来,但是距一个可以正常开发运行的web项目还有一 ...

  7. 机试指南第二章-经典入门-Hash的应用自解

    Hash的应用: Hash即散列,不像数据结构与算法中讲的各种Hash方法和冲突处理等过多的阐述,以下主要介绍Hash在机试试题解答中的作用. 例2.5 统计同成绩学生人数 Hash解法AC代码:(一 ...

  8. 「模拟赛20191019」B 容斥原理+DP计数

    题目描述 将\(n\times n\)的网格黑白染色,使得不存在任意一行.任意一列.任意一条大对角线的所有格子同色,求方案数对\(998244353\)取模的结果. 输入 一行一个整数\(n\). 输 ...

  9. LeetCode 946. 验证栈序列(Validate Stack Sequences) 26

    946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...

  10. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...