一、文件

文件是存储在存储器上的一组数据序列,可以包含任何数据内容。
文件是数据的抽象和集合。

二、文件类型


文本文件:长字符串

二进制是信息按照非字符但有特定格式形成的文件,文件内部数据的组织格式与文件用途有关


二进制文件和文本文件区别:
1、最主要的区别在于是否有统一的字符编码,二进制文件由于没有统一的字符编码,只能当做字节流,不能看作字符串。
2、无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。




采用文本文件方式读入文件,文件经过编码形成字符串,打印出有含义的字符。
采用二进制方式打开文件,文件被解析为字节流。由于存在编码,字符串中的一个字符由多个字节表示。

f = open("C:\\Users\\520\\Desktop\\a.txt", "tr", encoding="utf-8")
print(f.readline())
f.close()输出:
送你一朵小红花。例2:
Traceback (most recent call last):File "C:/Users/520/PycharmProjects/pythonProject1/guessnum.py", line 1, in <module>f = open("C:\\Users\\520\\Desktop\\a.txt", "br", encoding="utf-8")
ValueError: binary mode doesn't take an encoding argumentf = open("C:\\Users\\520\\Desktop\\a.txt", "br")
print(f.readline())
f.close()
输出:
b'\xe9\x80\x81\xe4\xbd\xa0\xe4\xb8\x80\xe6\x9c\xb5\xe5\xb0\x8f\xe7\xba\xa2\xe8\x8a\xb1\xe3\x80\x82'

三、文件的打开和关闭

  • Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”。
  • 操作系统中的文件默认处于存储状态,首先需要将其打开,使得当前程序有权操作这个文件。打开后的文件处于占用状态,此时,另一个进程不能操作这个文件。可以通过一组方法读取文件的内容或向文件写入内容,操作之后需要将文件关闭,关闭将释放对文件的控制使文件恢复成存储状态,此时,另一个进程将能够操作这个文件。
  • Python通过open()函数打开一个文件,并返回一个操作这个文件的变量,语法:
    文件对象 = open(“文件路径及文件名及扩展名”, “打开模式”)


    注意:文件路径及名称及扩展名,"“是转义符和续行符,所以改为”\“或”/"
    open()返回的即是文件对象


    r为读模式, w, x, a为写模式,t, b为打开模式,可以使用"+"组合使用,形成既表达读写又表达文件模式的方式
    r:read,w:wipe,x:exist,a:append,t:text,b:binary

变量名=open(文件名,“r”)
以文本方式打开一个文件,只读模式,读入后不能对文件进行修改

变量名=open(文件名,“r+”)
以文本方式可读写地打开一个文件,可以读入并修改文件

变量名=open(文件名,“a”)
以文本追加写方式打开一个文件,不能读信息

变量名=open(文件名,“a+”)
以文本追加写方式打开一个文件,可以读文件


当文件关闭后,再对文件进行读写将产生I/0操作错误。

四、文件的读取


如果文件以文本文件方式打开,则读入字符串;如果文件以二进制方式打开,则读入字节流。

f.read(),一次性读入整个文件所有内容,返回一个字符串
f.readline(),一次读取一行,返回一个字符串,调用多次读多行
f.readlines(),一次性读入整个文件所有内容,返回一个列表,列表的每个元素是字符串,是文件的每一行

对于大文件,一次性地读入会耗费非常多的时间和资源

f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")
print(f.read(2))
f.close()输出:新年f = open("C:\\Users\\520\\Desktop\\a.txt","rt")
print(f.read())
print(type(f.read()))
f.close
输出:
新年都未见芳华,二月初惊见草芽。
白雪却嫌春色晚,故穿庭树作飞花。
<class 'str'>f = open("C:\\Users\\520\\Desktop\\a.txt","rt")
print(f.readline())
print(type(f.readline()))
f.close
输出:
新年都未见芳华,二月初惊见草芽。<class 'str'>f = open("C:\\Users\\520\\Desktop\\a.txt","rt")
print(f.readlines())
print(type(f.readlines()))
print(f.readlines())
f.close
输出:
['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']
<class 'list'>
[]  #此时读取指针在文件末尾,再次调用f.readlines()已无法从当前读取指针处读入内容f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")
print(f.readlines())
f.seek(0)  # 将指针重置到文件开头
print(f.readlines())
f.close
输出:
['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']
['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']

遍历全文本一:一次读入,统一处理

遍历全文本二:按数量读入,逐步处理。分批分阶段,对处理大文件更加可行和有效

逐行遍历文件一:一次读入,逐行处理

逐行遍历文件二:分行读入,逐行处理
for line in f,读入的是文件的每一行,是一个字符串,含换行符

f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")
for line in f.readlines(): #逐行遍历文件:一次读入,分行处理print(line)
f.close()
输出:(两行文字输出之间有两个空行,是因为原文第一行后有一个换行符"\n",print()默认一个换行,共两个空行)
新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")
for line in f:  #逐行遍历文件:分行读入,逐行处理print(line)
f.close()
输出:
新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。
f = open("C:\\Users\\520\\Desktop\\a.txt", "rt", encoding="utf-8")
for line in f:print(line.replace("\n", ""))  #使用replace()去掉读入的换行符输出:
新年都未见芳华,二月初惊见草芽。
白雪却嫌春色晚,故穿庭树作飞花。print(line.strip("\n"))  #也可以用strip()去掉读入的换行符

注:逐行遍历文件仅针对文本方式,以二进制方式打开没有行的概念。

.

五、文件的写入



- f.wite(),向文件写入字符串或字节流,每次写入后,将会记录一个指针
- f.writelines(),向文件写入一个列表,每次写入后,将会记录一个指针
- 使用f.write(s)和f.writelines()时,都要显式地使用"\n"对写入文本进行分行,如果不进行分行,每次写入的字符串会被连接起来,中间没有空格或其它符号

例1、f.write()未使用换行符进行分行

f = open("C:\\Users\\520\\Desktop\\a.txt", "w")
f.write("新年都未有芳华")
f.write("二月初惊见草芽")
f.write("白雪却嫌春色晚")
f.write("故穿庭树作飞花")
f.close()


例2、f.write()显式地使用换行符"\n"进行分行

f = open("C:\\Users\\520\\Desktop\\a.txt", "w")
f.write("新年都未有芳华\n")
f.write("二月初惊见草芽\n")
f.write("白雪却嫌春色晚\n")
f.write("故穿庭树作飞花\n")
f.close()


例3、f.seek(),指针未重置

ls = ["韩愈(唐)\n", "新年都未有芳华", "二月初惊见草芽", "白雪却嫌春色晚", "故穿庭树作飞花"]
f = open("C:\\Users\\520\\Desktop\\a.txt", "w+")
f.writelines(ls)
for line in f:print(line)控制台输出:无输出


例4、f.seek(),读写之后重置指针

ls = ["韩愈(唐)\n", "新年都未有芳华", "二月初惊见草芽", "白雪却嫌春色晚", "故穿庭树作飞花"]
f = open("C:\\Users\\520\\Desktop\\a.txt", "w+")
f.writelines(ls) #写入文件之后,指针位于文件结尾处
f.seek(0)
for line in f:print(line)输出:
韩愈(唐)新年都未有芳华二月初惊见草芽白雪却嫌春色晚故穿庭树作飞花

t.txt内容:abcdefgf = open("t.txt", "r+")
f.seek(2, 0)
con = f.read()
print(con)
f.close()   输出:cdefg

六、文件备份

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能,备份文件格式为XXX[备份],例如:test[备份].txt。

# 1.接收用户输入的目标文件
old_name = input("请输入要备份的文件名:")
# print(old_name)
# 2.规划备份文件的名字
# 2.1 提取扩展名 -- 找到名字中的点 -- 名字和扩展名分离
# 2.2 最右侧的点才是扩展名--字符串查找某个子串
index = old_name.rfind(".")
# print(index)
# 2.3 组织新名字,原名+[备份]+扩展名
# 有效文件才备份
if index > 0:postfix = old_name[index:]new_name = old_name[:index] + '[备份]' + postfix
# print(new_name)
# 3.备份文件写入数据
# 3.1打开源文件和备份文件
old_f = open(old_name, "rb")
new_f = open(new_name, "wb")
# 3.2源文件读取,备份文件写入
# 如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了停止循环
while True:con = old_f.read(1024)if len(con) == 0:breaknew_f.write(con)
# 3.3关闭两个文件
old_f.close()
new_f.close()

七、文件的操作

在Python中⽂文件和⽂文件夹的操作要借助os模块⾥里里⾯面的相关功能,步骤:

  • 导入OS模块,import os
  • 使用OS模块相关功能,os.函数名()
    1、文件重命名
    os.rename(目标文件名, 新文件名)
    2、删除文件
    os.remove(目标文件名)
import os
# os.rename("t.txt", "t2.txt")
os.remove("t2.txt")

八、文件夹的操作

1、创建文件夹

import os
os.mkdir("aa")
print(os.path)

如果文件夹已存在,报错:

2、删除文件夹

import os
os.rmdir("aa")

3、获取当前文件所在目录

import os
print(os.getcwd())

4、改变默认目录

import os
os.mkdir("C:\\Users\\520\\Desktop\\aa")
os.chdir("C:\\Users\\520\\Desktop\\aa")
os.mkdir("bb")  # 在aa文件夹下创建bb文件夹 C:\Users\520\Desktop\aa\bb

5、获取目录列表,返回一个列表list,元素为各个文件名字符串(不含路径)

import os
print(os.listdir())  # 返回当前代码文件夹下的所有文件
import os
print(os.listdir("C:\\Users\\520\\Desktop"))

6、重命名文件夹,rename既可以重命名文件,也可以重命名文件夹

import os
# os.mkdir("aa")
os.rename("aa","aaaa")

九、应用案例

需求:批量量修改⽂件名,既可添加指定字符串,⼜能删除指定字符串

# 添加指定字符串,构造新名字
# 1,找到所有文件
# 1,1找到所有文件:获取文件夹目录列表 -- listdir()
import os
os.chdir("C:\\Users\\520\\Desktop\\aa")
file_list = os.listdir()
# 2,构造名字
for i in file_list:new_name = "new_" + i
# 3,重命名os.rename(i, new_name)

优化:

# 添加指定字符串,构造新名字;删除指定字符串,构造新名字
# 1,找到所有文件
# 1,1找到所有文件:获取文件夹目录列表 -- listdir()
import os
dir_name = "C:\\Users\\520\\Desktop\\aa"
# os.chdir("C:\\Users\\520\\Desktop\\aa")
file_list = os.listdir(dir_name)
print(file_list)
# 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符
flag = 1
# 2,构造名字
for i in file_list:if flag == 1:new_name = "new_" + i# 删除指定字符elif flag == 2:num = len("new_")new_name = i[num:]# 打印新⽂文件名,测试程序正确性print(new_name)# 3,重命名os.rename(dir_name + "\\" + i, dir_name + "\\" + new_name)

十、文件小结


  • w,文件指针在开头,会覆盖原内容
  • r,文件指针在开头,向下可以读入数据
  • a,文件指针在结尾,向下读不出数据,通过seek(偏移量,位置)改变指针位置

十一、小结

PS: source, python123

Python文件(一):文件类型、文件的打开,读取写入,关闭、文件备份、文件和文件夹的操作相关推荐

  1. python创建空文本文件_Python干货:「文件处理整合」 创建、打开、写入和删除...

    什么是Python文件处理? Python文件处理就是如何在python中创建.打开.读取.写入和删除文件的示例.从文件(EXCELSheet.doc文件.文本文件.cv等)或Add中读取数据.是一个 ...

  2. Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现“PermissionError: [Errno 13] Permission denied...

    Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现"PermissionError: [Errno 13] Permission denied"错误.这个错误通常 ...

  3. Python 文件打开读取写入方法

    目录 前言 open()方法 with open()方法 实用案例 前言 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写 ...

  4. 网络编程(part2)--文件读写之打开/读取/写入

    鄙人学习笔记 文章目录 文件读写 打开文件 举个例子1(以读方式打开) 举个例子2(以写方式打开) 读取文件 read 举个例子1 readline 举个例子2(继续用例子1的note.txt文件) ...

  5. 文件在另一个程序中打开,无法删除~【删除文件被占用问题】(保姆级教程,五种解决办法~)

    一,前言 当我们操作电脑要对一个文件进行删除的时候,很多时候都会提示你说你的文件被占用,不能够删除,这个时候我们就非常的苦恼了. 二,解决办法 方法一: 这说明这个文件被打开了,我们需要将这个文件关闭 ...

  6. c语言程序警告不能打开文件,Win10安装程序提示“不能打开要写入的文件”如何解决...

    现在,使用Windows10正式版的用户已经越来越多,因此用户们反馈的不同问题也随之增多了.比如,最近就有用户反馈在安装程序时,遇到错误提示"不能打开要写入的文件:XXXXXX单击[retr ...

  7. win10从服务器复制文件出现未知错误,win10系统打开公文包提示“发生未知错误 某些文件未复制”的处理办法...

    win10系统使用久了,好多网友反馈说win10系统打开公文包提示"发生未知错误 某些文件未复制"的问题,非常不方便.有什么办法可以永久解决win10系统打开公文包提示" ...

  8. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  9. 用Java读取/写入压缩和非压缩文件

    这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求. 首先让我们看看如何读取文本文件. 注意我正在使用(相对较小的)文本文件, ...

最新文章

  1. 收藏 | 机器学习数据集汇总收集
  2. [快报][贴图] ANSI Art 的新形式 - CSS-ANSI Art
  3. WPF入门(四)-线形区域Path内容填充之填充图(ImageBrush)
  4. Python 的 time 模块导入及其方法
  5. 闲话WPF之二六(WPF性能优化点)
  6. 产品经理如何走出被运营牵着鼻子走的怪圈
  7. JavaScript代码(一)
  8. 《罗辑思维》读书笔记及思维导图
  9. 构建新模式java_Nacos 1.3.0 来了,基于全新内核构建!
  10. 用FileInputStream和FileOutputStream实现文件复制粘贴
  11. nodejs redis 发布订阅_Redis 发布订阅,小功能大用处,真没那么废材
  12. 【开发工具】【Bus Hound】USB抓包工具(Bus Hound)的使用
  13. axios 封装数据请求
  14. 「整理了一些让人惊艳的古文情话」
  15. pageadmin CMS网站制作教程:如何修改栏目类型
  16. html5 canvas消除锯齿,HTML5 Canvas 如何取消反锯齿绘图
  17. mysql workbench 闪电_MySQL Workbench下载|可视化数据库设计建模(MySQL Workbench) 8.0 最新版-闪电下载吧...
  18. 连AI都在看《英雄联盟》游戏直播
  19. memory_max_target/memory_target设置过大报ORA-00845错误
  20. java设计九宫格拼图软件哪个好用_八款超好用的拼图工具

热门文章

  1. Hibernate二级缓存 --Hibernate框架
  2. CODE[VS]1012 最大公约数和最小公倍数问题
  3. 【Linux命令】nm 查看动态库和静态库中的符号
  4. Visual studio C++ MFC之列表控件CListCtrl Control
  5. marquee标签、插入百度地图
  6. C#将另一个应用程序的窗口移动到前端的问题
  7. POJ 3667 hotel(shǎ崽大神的模板|区间合并)
  8. 【推荐】.NET批量上传控件——HtmlInputFiles
  9. 无比乐java游戏_传智播客Java JavaEE+物联网云计算 就业班
  10. nuxt服务端php,nuxt服务端部署上线