day10.文件操作

一.文件处理流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

    克卜勒
    Kepler
    歌手:孙燕姿
    
    所属专辑:克卜勒
    
    作词 : Hush!
    等不到你
    成为我 最闪亮的星星
    我依然愿意 借给你我的光
    
    投射给你
    直到你 那灿烂的光芒
    静静地挂在 遥远的天上
    
    当你沉浸
    天空那条 冰冷的银河
    粼粼的波光 够不够暖活你
    
    当你想起
    那道 源自于我的光芒
    我依然愿意 为你来歌唱
    
    一闪一闪亮晶晶
    好像你的身体
    藏在众多孤星之中 还是找得到你
    挂在天上放光明
    反射我的孤寂
    提醒我 我也只是一颗寂寞的星星
    
    当你沉浸
    天空那条 冰冷的银河
    粼粼的波光 够不够暖活你
    
    当你想起
    那道 源自于我的光芒
    我依然愿意 为你来歌唱
    
    一闪一闪亮晶晶
    好像你的身体
    藏在众多孤星之中 还是找得到你
    挂在天上放光明
    反射我的孤寂
    提醒我 我也只是一颗寂寞的星星
    
    oh~~
    浩瀚的世界里
    更迭的人海里
    和你互相辉映
    而我们连续
    连接所有思念
    唱一首歌给你 给你
    
    一闪一闪亮晶晶
    好像你的身体
    藏在众多孤星之中 还是找得到你
    挂在天上放光明
    反射我的过去
    提醒我 我不再是一颗寂寞的星星

二.基本操作

2.1 文件操作基本流程初探

f = open(‘chenli.txt‘) #打开文件
first_line = f.readline()
print(‘first line:‘,first_line) #读一行
print(‘我是分隔线‘.center(50,‘-‘))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印读取内容

f.close() #关闭文件

2.2 文件编码

文件保存编码如下

此刻错误的打开方式
f=open(‘chenli.txt‘,encoding=‘utf-8‘)
f.read() 

正确的打开方式
#不指定打开编码,默认使用操作系统的编码,windows为gbk,linux为utf-8,与解释器编码无关
f=open(‘chenli.txt‘,encoding=‘gbk‘) #在windows中默认使用的也是gbk编码,此时不指定编码也行
f.read()

2.3 文件打开模式

1 文件句柄 = open(‘文件路径‘, ‘模式‘)

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

练习,利用b模式,编写一个cp工具,要求如下:

  1. 既可以拷贝文本又可以拷贝视频,图片等文件

  2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file

  提示:可以用import sys,然后用sys.argv获取脚本后面跟的参数

import sys
if len(sys.argv) != 3:
    print(‘usage: cp source_file target_file‘)
    sys.exit()

source_file,target_file=sys.argv[1],sys.argv[2]
with open(source_file,‘rb‘) as read_f,open(target_file,‘wb‘) as write_f:
    for line in read_f:
        write_f.write(line)

2.4 文件内置函数flush

flush原理:

  1. 文件操作是通过软件将文件从硬盘读到内存
  2. 写入文件的操作也都是存入内存缓冲区buffer(内存速度快于硬盘,如果写入文件的数据都从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘)
  3. flush即,强制将写入的数据刷到硬盘

滚动条:

import sys,time

for i in  range(10):
    sys.stdout.write(‘#‘)
    sys.stdout.flush()
    time.sleep(0.2)

或者

import time
for i in range(10):
    print(‘#‘,end=‘‘,flush=True)
    time.sleep(0.2)
else:
    print()

2.5 文件内光标移动

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

import time
with open(‘test.txt‘,‘rb‘) as f:
    f.seek(0,2)
    while True:
        line=f.readline()
        if line:
            print(line.decode(‘utf-8‘))
        else:
            time.sleep(0.2)

基于seek实现tail -f功能

2.6 open函数详解

1. open()语法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面3
buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
newline可以取的值有None, \n, \r, ”, ‘\r\n‘,用于区分换行符,但是这个参数只对文本模式有效;
closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。

2. Python中file()与open()区别
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,建议使用open

3. 参数mode的基本取值

Character Meaning
‘r‘ open for reading (default)
‘w‘ open for writing, truncating the file first
‘a‘ open for writing, appending to the end of the file if it exists
‘b‘ binary mode
‘t‘ text mode (default)
‘+‘ open a disk file for updating (reading and writing)
‘U‘ universal newline mode (for backwards compatibility; should not be used in new code)

r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
b、t、+、U这四个字符,与以上的文件打开模式组合使用,二进制模式,文本模式,读写模式、通用换行符,根据实际情况组合使用、

常见的mode取值组合

 1 r或rt 默认模式,文本模式读
 2 rb   二进制文件
 3
 4 w或wt 文本模式写,打开前文件存储被清空
 5 wb  二进制写,文件存储同样被清空
 6
 7 a  追加模式,只能写在文件末尾
 8 a+ 可读写模式,写只能写在文件末尾
 9
10 w+ 可读写,与a+的区别是要清空文件内容
11 r+ 可读写,与a+的区别是可以写到文件任何位置 

2.7 上下文管理

with open(‘a.txt‘,‘w‘) as f:
    pass
with open(‘a.txt‘,‘r‘) as read_f,open(‘b.txt‘,‘w‘) as write_f:
    data=read_f.read()
    write_f.write(data)

2.8 文件的修改

import os
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,        open(‘.a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f:
    for line in read_f:
        if line.startswith(‘hello‘):
            line=‘哈哈哈\n‘
        write_f.write(line)

os.remove(‘a.txt‘)
os.rename(‘.a.txt.swap‘,‘a.txt‘)
时间: 2024-10-26 15:17:28

day10.文件操作的相关文章

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

python文件操作

文件操作:os.mknod("test.txt")        创建空文件fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件 关于open 模式: w     以写方式打开,a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)r+     以读写模式打开w+     以读写模式打开 (参见 w )a+     以读写模式打开 (参见 a )rb     以二进制读模式打开wb     以二进制写模式打

Python基础(六) 基础文件操作

今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个文件,创建一个file对象,相关的方法可以调用它进行读写 . 语法格式如下: 1 2 3 file object = open(文件名,打开文件的模式) file object  = with open (文件名,打开文件的模式) as 变量名 两种语法格式的不同在于下面这种方法不用输入f.clos

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据

C语言中的文件操作---重定向操作文件

先说个题外话,文件操作以及字符串与字符深入处理(就是那些什么puts(), getchar()什么的)是本人深入认识C++最后的两座大山.而今天先把重定向文件操作解决掉. 输入输出重定向恐怕是文件I/O操作中最简单的方法了,具体用法是现在main函数的开头加入两条语句,例如: freopen("D:\\input.txt", "r", stdin); freopen("D:\\output.txt", "w", stdout)

文件操作

1.C文件操作 2.c++文件操作 3.MFC文件操作:CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件.内存文件和socket文件. Visual C++处理的文件通常分为两种: 文本文件:只可被任意文本编辑器读取ASCII文本. 二进制文件:指对包含任意格式或无格式数据的文件的统称. 1.定义文件变量 定义文件变量格式:CStdioFile 文件变量: 例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1; 2.打开指

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

C/C++文件操作

1 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作 2 一.流式文件操作 3 4 1.fopen() 5 FILE *fopen(const char *filename,const char *mode) 6 "r" 以只读方式打开文件 7 "w" 以只写方式打开文件 8 "a" 以追加方式打开文件 9 "r+" 以读/写方式打开文件,如无文件出错 10 "w+&quo