简述

    要使用文本中的信息首先要将文本中的信息读取到内存中。

    可以一次性读取文本的全部内容,也可以逐行读取。

    不管以何种方式使用文件,必须首先打开文件。

 

open()

    open()函数一般和with关键字搭配使用:

  • 关键字with在不需要使用文件后将其关闭,无需再写close()#尽管同样可以使用open(),close()打开关闭文件
  • 如果不使用with,当程序打开文件后的后续操作中存在bug,导致close()语句未执行,文件将不会关闭,可能会引起数据丢失
  • 如果不使用with,当程序过早的close()关闭文件,将会在使用问件时过早的关闭,将会导致更的错误,所以认为不能很好的确认恰当的时机关闭文件。
  • with可以让python去确定什么适当的时机关闭文件,你只需要打开文件并使用就行了。
  • 使用关键字时,open()返回的文件对象只在with代码块内可用。(如果想在with代码块外使用,可在with代码块内将想要使用的内容赋值给给一个变量)

  全文一次性读取read()

    读取文件中的所有内容,返回一个字符串对象,如果文件特别的话不建议这样做(读取的内容都刚在内存中,很占用内存空间)

    

digist.txt
1234567890
  23456789
  3456789A

  

testdata.py
#open函数返回一个表示文件的对象

with open(r'digist.txt') as f: #python在当前执行的文件(testdata.py)目录中(
    # learnother)查找指定的文件digist.txt
    contents = f.read()
    print(contents)
  print('-----------')

#输出结果
1234567890
  23456789
  3456789A

-----------

 

 输出
 

 

     *这里多出空行(----------和A所在行之后多出来一个空行)的原因:read()到达文件末尾时返回一个空字符串,而这个空字符串现实出来就是一个空行

     要删除这个空行可以使用rstrip()删除字符串末尾的空白。现在的输出和digist.txt原文保持一致

with open(r'digist.txt') as f: #python在当前执行的文件(testdata.py)目录中(
    # learnother)查找指定的文件digist.txt
    contents = f.read()
    print(contents.rstrip())
  print('-----------')


#输出结果
1234567890
  23456789
  3456789A
-----------

 

 

   逐行读取

filename = r"digist.txt"

with open(filename) as f:
    for line in f:
        print(line)

"""这里使用了filename变量,告诉python去哪里找对应的文件打开,因此可以根据文件路径轻松的键digist.txt替换成你想要打开的任意文件(完整的文件路径)"""

print("----------")

#输出
1234567890

  23456789

  3456789A

----------

 

   为什么会出现这些空白行?

        因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加上一个换行符,因此每行末尾都有两个换行符。一个来来自文件,一个来自print语句。

 消除多余的空白:rstrip()

filename = r"digist.txt"

with open(filename) as f:
    for line in f:
        print(line.rstrip())
print("----------")

#输出
1234567890
  23456789
  3456789A
----------

 

 

 

readline()

filename = r"digist.txt"

with open(filename) as f:
    lines = f.readlines()

data1 = ''
for line in lines:
    data1 += line.rstrip()

print(data1)#1234567890  23456789  3456789A


data2 = ''
for line in lines:
    data2 += line.strip()#1234567890234567893456789A
print(data2)

 

    在读取文本文件时,Python将其中所有的文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换为整数,或者使用函数float()将其转换为浮点数。

 

写入文件

 Puthon只能将字符串写入文本文件中,要将数值数据存入文本文件中,必须用函数str()将其转化为字符串格式。

 以写入(‘w’)模式打开文件,如果指定的文件已经存在,Python将在返回文件对象前清空该文件。如果文件不存在,函数open()将自动创建它。

模式 操作类型 操作文件不存在 文件是否会被覆盖
r 只读 error -
r+ 读写 error T
w  只写 create  
w+  读写 create  
a 只追加写 create F,追加
a+ 追加读写 create F,追加
wb 只写,二进制字符串 create T
rb 只读二进制字符串 error  _

 

 

 

 

 

 

 

 

 

 

 

 

write()函数不会在你写入的文本末尾添加换行符,因此写入多行没有自定换行符,文件将会和预期结果不一致。

filename = r"programming.txt"

with open(filename, 'w') as file_object:
    file_object.write("I love Python.")
    file_object.write("I love Python coding.")

#文件内容:I love Python.I love Python coding.

 

 要想能够换行需要再每次的写入中加上换行符“\n”不再演示。

 

文件异常处理

尝试读取一个不存在的文件。

filename = r"traval.txt"

with open(filename, 'r') as file_object:
    file_object.write("I love Python.")
    file_object.write("I love Python coding.")
"""
    with open(filename, 'r') as file_object:
FileNotFoundError: [Errno 2] No such file or directory: 'traval.txt'
"""

 

 

 处理异常:

def count_words:
    try:
        with open(filename, 'r') as f_ob:
            contents = f_ob.read()
    except FileNotFoundError:
        msg = "Sorry, the file" + filename + "does not exist"
        print(msg)
    else:
        #计算文件中含有的单词数
        words = contents.split()
        num_words = len(words)
        print("The file" + filename + "has about" + str(num_words) + "words.")

file_names = ['file1', 'file2,...]
for filename in file_names:
    count_words(filename)

 

 

加入文件filen不存在丝毫不会影响其他存在文件的处理。

 

存储数据

未完待补充。。。。。。