python文件打开模式组合_python文件处理

一.文件处理流程

打开文件,得到文件句柄并赋值给一个变量

通过句柄对文件进行操作

关闭文件

正趣果上果

Interesting fruit fruit

词:郭婞

曲:陈粒

编曲/混音/和声:燕池

萧:吗子

Words: Guo 婞

Song: Chen tablets

Arrange/ Mix /Harmony: Yan Chi

Xiao: Well

你佩桃木降妖剑

他会一招不要脸

哇呀呀呀

输在没有钱

输在没有钱

You wear peach down demon sword

He will shamelessly

Wow yeah

Lostinthe absence of money

Lostinthe absence of money

你愿终老不羡仙

谁料温柔终老空了长生殿

哎唏唏唏

败给好容颜

败给好容颜

You would like to end the old donotenvy cents

Mummy gentle death of the empty palace

Hey Xi Xi

Lost to good appearance

Lost to good appearance

人生在世三万天

趣果有间 孤独无解

苦练含笑半步癫

呐我去给你煮碗面

Lifeisthirty thousand days

Fun fruit thereisno solution between solitude

Hard practicing smiling half-step epilepsy

I'll go and cook your bowl

心怀啮雪大志愿

被人称作小可怜

呜呼呼呼

突样未成年

突样未成年

Heart of the snow big volunteer

Was called a small pitiful

Alas

Sudden sample of minor

Sudden sample of minor

本欲歃血定风月

乌飞兔走光阴只负尾生约

噫嘘嘘嘘

真心怕火炼

真心也怕火炼

The desire to set the wind blood months

Wu Flying Rabbit only time to bear the tail about

噫 boo boo

Really afraid of fire refining

Really afraid of fire

人生在世三万天

趣果有间 孤独无解

苦练含笑半步癫

呐我去给你煮碗面

Lifeisthirty thousand days

Fun fruit thereisno solution between solitude

Hard practicing smiling half-step epilepsy

I'll go and cook your bowl

是非对错二十念

十方观遍 庸人恋阙

自学睡梦罗汉拳

吓 冇知酱紫好危险

Rightandwrong twenty read

square view over the Yong love Que

Self-study sleep Lohan boxing

Scare know that a good risk of Jiang Xi

示范文件内容

二.基本操作

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="gbk")

data=f.read()

print(data)

2.3 with语句

为了避免打开文件后忘记关闭,可以通过with管理上下文,进而优化内存,即:

with open('log','r') as f:

pass

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open('log1') as obj1, open('log2') as obj2:

pass

2.4文件打开模式

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

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

打开文件的模式有:

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

w,只写模式【不可读;不存在则创建;存在则清空内容】

x, 只写模式【不可读;不存在则创建,存在则报错】

a, 追加模式【可读;   不存在则创建;存在则只追加内容】

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

r+, 读写【可读,可写】

w+,写读【可读,可写】

x+ ,写读【可读,可写】

a+, 写读【可读,可写】

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

rb  或 r+b

wb 或 w+b

xb 或 w+b

ab 或 a+b

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

应用:rb、wb、ab在FTP断点续传中有用。

总结:

a: 只读

w: 覆盖写

a: 追加写

r+: 默认光标在开始位置,写的追加写

w+: 覆盖写,想读取内容:seek调整

a+: 光标默认在文件最后位置,不管光标位置,一定是追加写;想读取内容;seek调整

2.5 Python3 File seek() 方法

seek() 方法用于移动文件读取指针到指定位置。

seek()方法语法如下:

fileObject.seek(offset[,whence])

参数

offset--开始的偏移量,也就是代表需要移动偏移的字节数

whence:可选,默认值为0.给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

返回值

该函数没有返回值。

例子1:这种模式是按照字符来操作

f=open("new_test","r",encoding="utf8") #hello哈

print(f.read(3)) # hel

f.seek(0)

print("------")

print(f.read()) # hello哈

例子2:这种模式是按照字节来操作

f=open("new_test","rb") #hello哈

print(f.read(3)) # b'hel'

f.seek(-3,2) # 该模式一定按字节操作

print("------")

print(f.read().decode("utf8")) # 哈

2.6 文件内置函数flush

flush原理:

文件操作是通过软件将文件从硬盘读到内存

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

flush即,强制将写入的数据刷到硬盘

滚动条:

import sys,time

for i in range(10):

sys.stdout.write('#')

sys.stdout.flush()

time.sleep(0.2)

百分比显示滚动条:

import sys,time

for i in range(100):

s="\r%d%% %s" %(i,"#"*i)

sys.stdout.write(s)

sys.stdout.flush()

time.sleep(0.5)

2.7 文件内光标移动

注意:read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位如seek,tell,read,truncate

整理中

2.8 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取值组合

r或rt 默认模式,文本模式读

rb 二进制文件

w或wt 文本模式写,打开前文件存储被清空

wb 二进制写,文件存储同样被清空

a 追加模式,只能写在文件末尾

a+可读写模式,写只能写在文件末尾

w+ 可读写,与a+的区别是要清空文件内容

r+ 可读写,与a+的区别是可以写到文件任何位置

2.9 eval用法

eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象

例如:把字符串转成字典

a=input("pls{....}:") # {"name":"luchuan"}

print(type(a)) #

a=eval(a)

print(type(a)) #

print(a["name"]) #alex

3.0 truncate方法

truncate只有在写模式才能用

truncate()方法用于截断文件,如果指定了可选参数size,则表示截断文件为size个字符。如果没有指定size,则重置到当前位置。

f=open('a.txt','w')

f.write('1111111111\n')

f.write('1111111111\n')

f.write('1111111111\n')

f.seek(0)

f.truncate(3)

3.1 writelines方法

f=open('a.txt','w')

f.writelines(['1111111\n','11111111\n'])

f.close()

思考题:

硬盘数据是在block块上,数据只能追加和覆盖,不能进行修改。

内存里的数据是可以修改得。

现在需要对以下test文件进行修改,应该怎么操作?

test内容:

昨夜寒蛩不住鸣。

惊回千里梦,已三更。

起来独自绕阶行。

人悄悄,帘外月胧明。

白首为功名,旧山松竹老,阻归程。

欲将心事付瑶琴。

知音少,弦断有谁听。

count = 0

with open("test",encoding="utf8") as f_read,open("test2",encoding="utf8",mode="w") as f_write:

for line in f_read:

if count==3:

line="".join([line.strip(),"张飞\n"])

f_write.write(line)

count+=1

import os

os.rename("test","test_bak")

os.rename("test2","test")

参考链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值