小白的Python日记——文件I/O:txt的读取

小白的Python日记——文件I/O

小白我平时使用Python的场景大多数是在做一个多平台的整合,换句话说就是整理一个语言编写的模块(比如C#)的输出,传递给另一个语言编写的模块(比如Matlab)。因为这些模块已经完成封装,焊死了门窗,但不同模块之间会存在使用的文件格式不一致,因此需要大量的文件处理。因此,会频繁的使用到Python的文件I/O。

主要进行传递的文件格式包括*.txt(或使用文本格式的各种文件),*.xls/xlsx, *.csv, *.xml(或使用xml格式的各种文件),不同格式的读取通常使用不同的模块,接下来的几天将按照不同的文件格式分别进行介绍。

  • *.txt

文本文件是我们储存简单数据或信息时最常用的文件格式之一,Python在处理文本文件时通常不需要引入第三方库。操作的顺序就是通常的 打开 > 读取/写入 > 关闭

首先是打开文件

txt_file = open('test.txt',‘r’)

‘test.txt’是需要打开的文件路径,既可以是绝对路径,也可以是相对路径
‘r’ 表示打开文件的方式为读取,且读取的文件必须存在,否则报错,类似的设置有
‘r+’ 表示打开文件的方式为读写,同样的,该文件必须存在。
‘w’ 表示打开文件的方式为写入,若文件已存在则将现有文件内容清零再重新写入(注意,是打开时即清零)。若文件不存在则建立该文件。
‘w+’ 表示打开文件的方式为读写,若文件已存在则将现有文件内容清零再重新写入(同‘w’)。若文件不存在则建立该文件。
‘a’ 同样表示打开文件的方式为写入。与‘w’不同的地方在于,如果文件存在,新写入的数据会被加到文件尾,即文件原先的内容会被保留。 若文件不存在,则会建立该文件,
‘a+’ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
注意,如果打开的是二进制的文件,则可以在上述的形态字符串后都可以再加一个’b’字符,如’rb’、'ab+’等组合

得到的txt_file就是我们需要的文件对象,可以对其进行读写操作

content = txt_file.read()

read()表示读取,可以指定参数以读取特定长度,如不指定,则读取全部数据

content = txt_file.read(4) #长度应为正整数 

read() 的返回值为字符串,通常适用于较小且格式简单的文件

类似的方法有

readline(),读取文件中的一行数据并返回为字符串。单步动作,占用内存少,使用比较灵活,比如自上而下的检索文档是否含有关键字。
readlines(),读取全部数据,并按每行一个字符串的格式,自上而下的顺序返回一个list。同read()一样,相当于将整个文件在内存中存储,处理比较方便,但如果文件较大时,占用内存较多。

同样的,可以向文本文档进行写入

扫描二维码关注公众号,回复: 4668271 查看本文章
txt_file = open('text.txt', 'w')
test = 'hello world!'
txt_file.write(test)

write()用于向文本文件中写入字符串,如果有多组数据需要写入,可以多次调用,但不会自动输出换行符,需要手动输入

test1 = 'hello world!\n'
test2 =  'hello world again!\n'
txt_file.write(test1)
txt_file.write(test2)

类似的方法还有

writelines(),跟readlines类似,将列表中的字符串写入文件,同样不会自动换行,如果有需要需要手动添加(所以在字符串后面加分隔符或换行符也是一个好习惯哦)。这里需要注意的是,writelines()的参数只能是list对象

test = ['Hey\n',
        'This is a test\n',
        'test end\n']
txt_file.writelines(test)

无论是 read还是write,在对文件操作结束后,都要关闭(保存)文件,归还I/O接口

txt_file.close()

如果忘记close的话就结束程序的话,如果是read会导致其一直处于被打开状态,无法编辑,write相同且不会保存你希望保存的信息。总之就是,不close等于白干。

那么为了防止自己忘记close,这里就要夸奖一下with动作,利用with进行文件流操作,将在with语句执行结束后自动关闭

with open('test.txt','r') as txt_file:
    content = txt_file.read()

那么说完了基本的语句操作,来看一个小例子吧

我们需要处理这样一个模型文件(节选):

CALCN 10
SDSTAT 2
DONGLOG 0
MULTIBODY 1
OPTNS 135605
OUTSTYLE A
PATH E:\Working\test\Model
RUNNAME Model
IPW 431693441
NCRYPT 1
CRYPT1 686bv6
LPW1 20

需要建立一个方法供使用者调用,以实现更换指定字段信息并保存,已知字段名与字段信息之间以tab分割且字段名唯一(不会重复出现),方法定义如下

def change_info(file_dir, label, info):
    with open(file_dir, 'r') as target:
        lines = target.readlines()
        for i in range(len(lines)):
            split_info = lines[i].split('\t')
            if label == split_info[0]:
                lines[i] = label + '\t' + info + '\n'
                break
    with open(file_dir, 'w') as target:
        target.writelines(lines)
    return

下一篇将介绍让我醉生梦死excel的操作,じゃね

猜你喜欢

转载自blog.csdn.net/weixin_42885192/article/details/85230053