计算机文件分为文本文件和二进制文件,本文介绍文本文件的数据读写方法,如txt,word等都是文本文件。

一、读取整个文件内容

file.read()可以读取整个文件的内容,并以字符串形式返回。
with关键字可以自动打开和关闭文件,不需要额外调用close()关闭文件。
注意如果文件中有汉字,需要设置编码格式

代码示例:读取test.txt的全部内容并输出。

test.txt内容如下:

python 读取文本内容 python 读取文本文件_读取文件

with open("test.txt") as file:
    whole_content=file.read()
print(whole_content)

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

相比于原始文件,输出的末尾多了一行空行。这是因为read()到达文件末尾时返回了一个空字符串,显示出来就是一个空行。要删除这个空行,可以调用python内置函数rstrip()实现。

rstrip()用于删除字符串末尾的指定字符,默认为空格。

代码示例:

with open("test.txt") as file:
    whole_content=file.read()
whole_content=whole_content.rstrip()
print(whole_content)

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

可以发现,空行已经被删除。

二、逐行读取文件内容

方法一

代码示例:

with open("test.txt") as file:
   for line in file:
       print(line.rstrip())

print内容:

abddefg
hijklmn
opq   rst
uvw   xyz
i love you

此处调用rstrip()方法的原因也是删除字符串末尾的空格。

方法二:readlines()方法

readlines() 方法用于读取文件中的所有行,并以列表形式返回。
列表是可迭代的,因此可以采用for循环输出每一行。

代码示例:

with open("test.txt") as file:
   lines=file.readlines()
   for line in lines:
       print(line.rstrip())

print内容:

abddefg
hijklmn
opq   rst
uvw   xyz
i love you

三、读写模式

python提供了不同的文件读写模式:
‘r’ :读取模式
‘r+’ :读写模式。
‘w’ :写入模式。如果写入的文件不存在,则会自动创建文件。若文件以及存在且文件中有数据,则会先清除文件内容再写入。
‘a’ :附加模式。在文件末尾添加内容,在写入时不会清除原文件内容。
注意python只能将字符串写入文本文件,所以要将数值数据存储到文件中,必须先使用str()方法将其转换为字符串格式。

四、将数据写入文件:write()方法

代码示例:

with open("new.txt",'w') as newfile:    # 自动创建new.txt
    with open("test.txt") as file:
       lines=file.readlines()
       for line in lines:
           newfile.write(line)
            
# 此时new.txt已经自动关闭,引出需要重新打开文件才能读取数据
with open("new.txt",'r') as f:
    content=f.read()
print(content.rstrip())    # 输出new.txt的全部内容用以验证

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

五、读取文件内容并写入另一个文件

enumerate()方法可以逐行读取文件内容,并返回行数和每一行的内容。

代码示例:逐行读取test.txt的内容并将前三行内容写入到new.txt中。

with open("new.txt", 'w') as newfile:    # 此处a和w模式的效果是一样的
    with open("test.txt",'r') as file:
        for index,line in enumerate(file):
            if index <= 2:
                newfile.write(line)

# 此时new.txt已经自动关闭,引出需要重新打开文件才能读取数据
with open("new.txt",'r') as f:
    content=f.read()
print(content.rstrip())

print内容:

abddefg    
hijklmn
opq   rst

注意:
(1)在这个程序中,“with open(“new.txt”, ‘w’) as newfile:” 写在了最外面,若将这一行写在“ with open(“test.txt”,‘r’) as file:”里面,则每次都会重新打开new.txt进行数据写入,要想数据不被覆盖,必须用’a’附加模式打开new.txt文件。且频繁对文件进行打开和关闭对于硬盘并不友好(容易导致硬盘损坏),尤其对于数据很多的文件,频繁读取文件会导致耗时较长,因此应尽量减少文件操作的次数。

(2)enumerate()方法可以很容易地控制写入文件的行数,是一种读取文件的好方法。