一、文件内容读取

1、读取文件内容

pi_digits.txt文件内容如下:
3.14159526
55566656
44568965
通过python文件处理读取文件内容:

with open('D:\pythontest\pi_digits.txt') as f:
    contents = f.read()
    print(contents)

输出:

3.14159526
  55566656
  44568965

输出打印有一行空行,在print语句中使用rstrip()

with open('D:\pythontest\pi_digits.txt') as f:
    contents = f.read()
    print(contents.rstrip())

末尾输出不带空行

2、文件路径

open中的文件路径可以是绝对路径或者相对路径
绝对路径类似于‘D:\pythontest\pi_digits.txt’
相对路径如该python脚本就在pythontest目录下,则路径可以直接写成‘pi_digits.txt’ 与python脚本处于同级目录

也可以将绝对路径存储在一个变量之中,再将该变量传给open(),如:

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    contents = f.read()
    print(contents.rstrip())

输出

3.14159526
  55566656
  44568965

3、逐行读取,存在需要遍历文件,并匹配其中某行的需求

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    for line in f:
        print(line)

输出

3.14159526

  55566656

  44568965

由于文件每行末尾有一个看不见的换行符,因此print打印的时候一并打印了换行符,同上一节相同,使用rstrip()来去除,后续将直接带。

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    for line in f:
        print(line.rstrip())

输出

3.14159526
  55566656
  44568965

如需要输出匹配的行,可以在其中再增加条件语句并输出
遍历文件寻找文件中是否包含了3.14159526这行,并充分说明了这行末尾时带了一个换行符的,如果在条件中不加’\n’,将匹配不到任意一行。

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    for line in f:
        if line == '3.14159526\n':
            print(line.rstrip())
        else:
            print("none")

输出

3.14159526
none
none

4、创建一个包含文件各行内容的列表

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    lines = f.readlines()   #readlines()方法,从文件中读取每一行,并将其存在一个列表中,将该列表存储到lines变量中
    for line in lines:
        print(line.rstrip())

输出

3.14159526
  55566656
  44568965

5、使用文件的内容

创建一个空字符串,将

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    lines = f.readlines()   #readlines()方法,从文件中读取每一行,并将其存在一个列表中,将该列表存储到lines变量中

pi_str = ''
for line in lines:
        pi_str += line.rstrip()
print(pi_str)
print(len(pi_str))

输出

3.14159526  55566656  44568965
30

可以使用strip()函数代替rstrip()函数,去除空格

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    lines = f.readlines()   #readlines()方法,从文件中读取每一行,并将其存在一个列表中,将该列表存储到lines变量中

pi_str = ''
for line in lines:
        pi_str += line.strip()    #strip()代替rstrip()
print(pi_str)
print(len(pi_str))

输出

3.141595265556665644568965
26

6、你的生日是否在圆周率内,第3节的变化,判断字符串是否在整个字符串内

objfile = 'D:\pythontest\pi_digits.txt'
with open(objfile) as f:
    lines = f.readlines()   #readlines()方法,从文件中读取每一行,并将其存在一个列表中,将该列表存储到lines变量中

pi_str = ''
for line in lines:
        pi_str += line.strip()    #strip()代替rstrip()
birthday = input("你的生日是:")
if birthday in pi_str:
    print("你的生日在圆周率")
else:
    print("你的生日不在")


print(pi_str)
print(len(pi_str))

输出

你的生日是:1415
你的生日在圆周率
3.141595265556665644568965
26

二、文件内容写入

1、写入空文件

写入‘i love NJ!’到新文件test1.txt中,如未指定位置,将保存在当前目录下。
调用open()时提供了两个实参,第一个实参时要打开的文件的名称,第二个实参‘w’告诉python我们要以写入模式打开文件。打开文件时,可以指定读取模式‘r’、写入模式’w’、附加模式’a’或让你能够读取和写入文件的模式‘r+’,如果省略,默认只读模式。

filename = 'test1.txt'
with open(filename, 'w') as f:
    f.write("i love NJ!")

输出内容

i love NJ!

如果文件不存在,open会创建该文件,如果该文件已存在,覆盖原有内容。

2、附加到文件

如果想要给文件附加内容,而不是覆盖原有内容,使用附加模式’a’打开文件。

filename = 'test1.txt'
with open(filename, 'a') as f:    #'a'附加模式
    f.write("i love BJ!")
i love NJ!i love BJ!

如果想要分行,需要添加’\n‘换行符