python文件处理笔记之文本文件

文本文件具备初步存放、编辑各类数据的能力,并可以持久保留和数据共享。

1. 建立文件

建立文本文件有两种途径:一是通过Windows的“记事本”工具创建一个扩展名为“.txt”的文件,然后供程序调用。二是通过程序自动建立新文件。

1.1 文本文件代码实现

1

2

3

4

newfile="g:\\t1.txt"#定义需要建立的文本名称和路径

b_new_file=open(newfile,"w")#用open函数建立一个新的文本文件

b_new_file.close()#关闭文件

print("%s成功建立!"%newfile)

效果:

1.2 代码编写分析

文本文件的名称

(1)文本名称,命名要符合命名内容,一般情况下以英文字母、数字、汉字开头的易于阅读的字符串组合。不能使用星号(*)等特殊符号开头的命名。

(2)文本名称是一个字符串,命名过程中需要考虑到转义符号对路径或名称的影响。如:“g:\t1.txt”中的“\t”本身就是一个横向制表符,如果用“g:\t1.txt”就会出错。另一种解决字符串转义符的方法是在字符串前加原始字符串限制符号(原生字符r或R)可以原样输出r“g:\t1.txt”。

(3)指定路径必须设置(在不同的解释器中,对于路径的设置有区别)

用open函数建立(打开)文件

open函数属于系统内置函数,支持对字符串或二进制文件的打开操作,返回可操作的文件对象。

使用格式:

open(file,mode=“w”)

file参数用于指定需要操作的文件名(可以同时只当文件路径);mode参数用于指定需要操作的方式。

r、w、x、a为打开文件的基本模式,对应这只读、只写、新建、追加四种打开方式;b、t、+、U与基本模式组合使用,对应二进制、文本、读写、通用换行符四种模式。

mode默认值为“rt”模式,意味着对文本文件进行读操作。目前,mode值常见可以组合的方式为“rb"、”wb“、”xb“、”ab“、”rt“、”wt“、”xt“、”at“、”r+“、”w+“、”x+“、”a+“。

用b_new_file.close()方法把新建立的文件关闭

如果不关闭新建立的文本文件,则打开的文件对象一直留存在内存中,如果打开的文件多了,容易出现内存溢出等错误。

2. 基本的读写文件

打开文本文件后,可以对文件进行基本的读写操作。

2.1 用文件对象write(s)方法写内容

f.write(s),f代表可写方式打开文件对象;s为将要写入文件的内容,write()方法把s内容写入文件f后,返回写入的字节数。

1

2

3

4

5

newfile="g:\\t1.txt"#定义需要建立的文本名称和路径

b_new_file=open(newfile,"w")#用open函数建立一个新的文本文件

t_n=b_new_file.write("l like python!")#用文件对象write()方法写字符串

b_new_file.close()#关闭文件

print("往文件里写入%d字节内容"%t_n)

效果:

”w“模式打开的文本文件,在写入内容时,第二次写入的内容会覆盖第一次保存的内容,若要解决此问题,采用”a“模式打开文件。

2.2 用文件对象read()方法读取内容

f.read(size),f代表可读方式打开的文件对象;size为可选参数,若指定读取字节数,则读取指定大小字节的内容,若没有指定,则读取尽可能大的内容。

1

2

3

4

b_new_file=open(newfile,"r")#以只读方式打开文件

tt=b_new_file.read()#用文件对象read()方法读取内容

print(tt)

b_new_file.close()

效果:

2.3 连续用read()方法、write()方法操作文件

1

2

3

4

5

6

b_new_file=open(newfile,"r+")#用open函数建立一个新的文本文件

tt=b_new_file.read()#用文件对象read()方法读取内容

print(tt)

t_n=b_new_file.write("\n三酷猫!^_^")#继续往文件里写入新内容

b_new_file.close()

print("往文件里写入%d字节内容"%t_n)

效果:

注意:不鼓励连续读写操作方法,因为存在读写数据不确定性问题

3. 复杂的读写文件

在基础的读写存在上,可以考虑多行读写的操作。

1、一次写入多行

1

2

3

4

5

6

nums=["one","two","three","four","five","six","seven"]

t=open(r"g:\t2.txt","a")#追加打开文件

forget_oneinnums:

t.write(get_one+"\n")#将每个元素循环写入文件,行末加\n

t.close()

print("连续写入完成")

效果:

2、一次读一行

f.readline(s),f代表以可读模式打开的文件;s为可选参数,若设置指定大小的字节,则返回相应大小的字符串,若没有设定,则以行单位返回字符串。

1

2

3

4

5

t1=open(r"g:/t2.txt","r")

dd=1

whiledd:

dd=t1.readline()#一次读一行

print(dd.strip())#strip()去除字符串两端的空字符

效果:

3、以列表格式读取多行

1

2

3

t1=open(r"g:/t2.txt","r")

t_s=t1.readlines()#以列表格式读取多行

print(t_s)

效果:

4、连续读特定字节数量的内容

1

2

3

4

5

f=open(r"g:/t2.txt","r")

print(f.readline(2))#读取文件头2个字节

print(f.readline())#继续读取同一行,剩余字节

print(f.read(4))#继续读取4个字节

print(f.read(4))

效果:

5、在指定位置读内容

5.1 f.tell(),f代表打开的文件,tell()方法返回当前文件可以写入读写的位置(字节数)

1

2

3

4

5

6

7

8

f=open(r"g:/t2.txt","r")

print(f.readline(2))#读取文件头2个字节

print(f.readline())#继续读取同一行,剩余字节

print(f.read(4))#继续读取4个字节

print(f.read(4))

print(f.tell())#获取执行上述操作后的当前位置

print(f.read(1))

print(f.tell())

效果:

5.2 f.seek(offset[,whence]) f代表以打开的文件,seek()方法重新指定将要读写的当前位置。offset参数设置位置的偏移量的字节数,whence参数可选,确定文件起计位置,默认值为SEEK_SET(或0),代表从文件大的开始位置+偏移量来确定当前位置;SEEK_SET(或1),代表当前位置起计;SEEK_END(或2),代表从文件的结尾起计。