Python学习笔记(9) --文件操作

传送门==>B站黑马python入门教程


目录


1. 文件编码概念

计算机只能识别到 0 和1, 那么对于丰富的文本文件是如何被计算机识别,且存储到硬盘中?

使用编码技术(密码本)将内容翻译为0/1存储;

编码技术:翻译规则-记录如何将内容翻译为二进制,以及如何将二进制翻译回可识别的内容;

计算机中有许多的可用编码:

  • UTF8(目前通用的默认编码形式)
  • GBK
  • Big5
  • ...

不同的编码,翻译内容时转换的二进制也是不同的;
1.什么是编码?

编码就是规则集合,记录了内容与二进制之间的相互转换逻辑;

编码有许多种,常用的是UTF-8编码;
2.为什么需要使用编码?

计算机只认识0和1,所以需要将内容翻译为0和1才能保存到计算机中;

同时也需要编码,将计算机保存的0和1,反向翻译回可以识别的内容;


2.文件的读取操作


2.1 基础学习

文件:

内存中存放的数据在计算机关机后就会消失,要长久保存数据,就要使用硬盘,光盘,U盘等设备,为了便于数据的管理和检索,

引入文件概念

文章/视频/可执行的程序,都可以被保存为一个文件,并且赋予一个文件名.

操作系统以文件为单位管理了磁盘中的数据,正常状况下,文件可以分为文本文件,视频文件,音频文件,图像文件,可执行文件等多种类别;

日常使用文件时,主要有打开,关闭,读取,写入...操作

平时对文件的基本操作,大概可分为三步:(注:可以只打开/关闭文件,不进行任何的读写)

  • 打开文件
  • 读写文件
  • 关闭文件

open()打开函数

在python中,使用open函数,可打开一个已存在的文件,或者去创建出一个新的文件;

语法:open(name, mode,encoding)
name:要打开的目标文件名的字符串,可以包含文件所在的具体路径;
mode:设置打开文件的模式(访问模式):只读,写入,追加等;
encoding:编码格式(推荐使用UTF-8)

python 复制代码
# 打开文件
f = open("F:/pythonworkspace/startDemo/fileDemopath/demo.txt", "r", encoding="utf-8")
print(f"类型为:{type(f)}")
print(f"文件名:{f.name}")
print(f"访问模式:{f.mode}")
print(f"是否已关闭:{f.closed}")
print(f"文件编码:{f.encoding}")
print(f"文件大小:{f.tell()}")

注:此时的fopen函数的文件对象,对象是python中一种特殊的数据类型,拥有属性和方法,

可以使用对象.属性或者对象.方法 对其进行访问


读操作相关方法

  • read()方法:
    文件对象.read(num)
    num:要从文件中读取的数据长度(单位-字节),若没有传入num,就是要读取文件中的所有数据;
python 复制代码
# 读取文件
print(f"读取4个字节内容:{f.read(4)}")
print(f"读取所有内容:{f.read()}")
  • readlines()方法:
    可以按照行的方式把整个文件的内容进行一次性读取,且返回一个列表,每一行的数据为一个元素;
python 复制代码
# readlines
list = f.readlines()
print(f"list的类型为{type(list)}")
print(f"list的内容为{list}")
  • readline():一次只读取一行内容;
python 复制代码
# readline
print(f"文件的第一行内容:{f.readline()}")
print(f"文件的第二行内容:{f.readline()}")
print(f"文件的第三行内容:{f.readline()}")
print(f"文件的第四行内容:{f.readline()}")
  • for 循环读取文件换行
    每次读取临时变量的作为一部分,就是记录了文件的一行内容
python 复制代码
for 循环读取文件换行
# 每次读取临时变量的作为一部分,就是记录了文件的一行内容
  • 关闭文件文件.close()
python 复制代码
f.close()
  • with open 该语句块读取文件后会自动关闭文件
python 复制代码
with open("F:/pythonworkspace/startDemo/fileDemopath/demo.txt", "r", encoding="utf-8") as f:
    print(f.readlines())

2.2 练习

文件读取联系:单词计数;

创建一个txt文件,然后写一写内容;统计python这个单词出现的次数;

python 复制代码
def count_word(line,word):
    """
    统计一行数据中固定单词出现的次数;
    :param line 文本
    :param word 单词
    """
    count = 0
    # line是一段长文本没有空格什么的
    for i in range(len(line)):
        if line[i:i+len(word)] == word:
            count += 1
    return count


f =  open("F:/pythonworkspace/startDemo/fileDemopath/practice.txt", "r", encoding="utf-8")

count = 0
for line in f:
    count += count_word(line,"python")
    
f.close()

print(f"python出现的次数为:{count}")



3.文件的写入操作

  • 打开文件
  • 文件写入
  • 内容刷新
python 复制代码
案例
f = open('demo.txt'.,'w')
f.write("hello world")
f.flush()

注:

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中:缓冲区
  • 当调用flush时,内容才真正地写入文件了
  • 这样可以避免频繁操作硬盘,导致效率下降

4.文件的追加写入操作

在文件写入的基础上,文件操作模式调整为'a'模式-追加写入;

:

  • 文件不存在时会创建文件
  • 文件存在会在最后,追加写入文件
python 复制代码
f = open("F:/pythonworkspace/startDemo/fileDemopath/demo2.txt", "a", encoding="utf-8")
f.write("追加写入的内容")
f.flush()

5.练习


文本数据备份

对于demo3的文件,

  • 读取文件,然后将文件写入到demo3_back.txt
  • 然后同时将文件中标记为测试类型的数据行丢弃
  • open()和r模式打开一个文件对象,且读取文件
  • open()和w模式打开另一个文件对象,且进行文件写出
  • for循环内容,判断是否是测试,不是测试就写出,如果是测试就continue跳过
  • 将文件关闭;
python 复制代码
# 读取原文件
f = open("F:/pythonworkspace/startDemo/fileDemopath/demo3.txt", "r", encoding="utf-8")
# 备份的文件
f_back = open("F:/pythonworkspace/startDemo/fileDemopath/demo3_back.txt", "w", encoding="utf-8")
# 操作文件
for line in f:
    # 去除换行符
    line = line.strip()
    type = line.split(",")[4]
    if type != "测试":
        f_back.write(line + "\n")
    else:
        continue
        
f_back.flush()
f.close()
f_back.close()

相关推荐
暗然而日章2 小时前
C++基础:Stanford CS106L学习笔记 14 类型安全 & `std::optional`
c++·笔记·学习
WongLeer2 小时前
Redis 学习笔记
redis·笔记·学习·redis缓存·redis发布订阅
大筒木老辈子2 小时前
C++笔记---并发支持库(future)
java·c++·笔记
愈努力俞幸运2 小时前
Python heapq (堆/优先队列)
python
SHolmes18542 小时前
给定某日的上班时间段,计算当日的工作时间总时长(Python)
开发语言·前端·python
C嘎嘎嵌入式开发2 小时前
NLP 入门:从原理到实战的个人经验总结
人工智能·python·自然语言处理·nlp
咖啡の猫2 小时前
Python字典元素的增、删、改操作
java·开发语言·python
Swizard2 小时前
Python 并不慢,是你看不懂:拆解 CPython 虚拟机背后的魔法引擎
python
PyGata2 小时前
CMake学习笔记(二):CMake拷贝文件夹
c++·笔记·学习