python入门_day8_Chap10_文件

10.1从文件中读取数据

1.读取整个文件

首先创建文件pi_digits.txt
在这里插入图片描述
file-reader.py

with open('pi_digits.txt') as file_object:
    contents=file_object.read()
    print(contents)

要以任何方式使用文件,都得先打开 打开 文件,这样才能访问它。

函数open() 接受一个参数:要打开的文件的名称。
Python在当前执行的文件所在的目录中查找指定的文件。

在这个示例中,当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中 查找pi_digits.txt。

函数open() 返回一个表示文件的对象。在这里,open(‘pi_digits.txt’) 返回一个表示文件pi_digits.txt 的对象;Python将这个对象存储在我们将 在后面使用的变量中。

关键字with 在不再需要访问文件后将其关闭。
在这个程序中,注意到我们调用了open() ,但没有调用close() ;你也可以调用open() 和close() 来打开和关闭文件,但 这样做时,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。

相比于原始文件,该输出唯一不同的地方是末尾多了一个空行。
Q:为何会多出这个空行呢?
A:因为read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一 个空行。
Solution:要删除多出来的空行,可在print 语句中使用rstrip()

with open('pi_digits.txt') as file_object:
    contents=file_object.read()
    print(contents.rstrip())

两次运行结果:
在这里插入图片描述

2.文件路径

相对文件路径打开文件:
(Windows系统)
with open(‘text_files\filename.txt’) as file_object

(Linux,OS X系统 斜杠不同):
with open(‘text_files/filename.txt’) as file_object:

绝对路径(文件在计算机中的准确位置)通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open() 会有所帮助。

file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt' 
with open(file_path) as file_object:

3.逐行读取

使用for 循环

#将要读取的文件的名称存储在变量filename 中
filename='pi_digits.txt'

#调用open() 后,将一个表示文件及其内容的对象存储到了变 量file_object 中
with open(filename) as file_object:
    for line in file_object:
        print(line)
        

由于每一行的末尾有看不见的换行符,print语句也有换行符,所以运行结果:
在这里插入图片描述

4.创建一个包含文件各行的列表

filename='pi_digits.txt'

with open(filename) as file_object:
    #方法readlines() 从文件中读取每一行,并将其存储在一个列表中
    lines=file_object.readlines()


for line in lines:
    print(line.rstrip())
        

5.使用文件的内容
将文件读取到内存中后,就可以以任何方式使用这些数据了。

首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:

filename='pi_digits.txt'

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


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


print(pi_string)
print(len(pi_string))

运行结果:

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

6.圆周率中有你的生日吗

filename='pi_digits.txt'

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


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

birthday=input('Enter your birthday,in the form mmddyy')
#字符串查找
if birthday in pi_string:
    print('your birthday is in it')
else:
    print('your birthday is not in it')

练习
1.:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python知识,其中每一行都以“In Python you can”打头。将这个文件命名为 learning_python.txt,并将其存储到为完成本章练习而编写的程序所在的目录中。
编写一个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个 文件;第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在with 代码块外打印它们。

#读取整个文件
with open('learning_python.txt') as file_object:
    contents=file_object.read()
    print(contents)
    

#打印遍历文件对象
filename='learning_python.txt'
with open(filename) as file_object:
    for line in file_object:
        print(line)


#打印时将各行存在一个列表中
with open(filename) as file_object:
    lines=file_object.readlines()

for line in lines:
    print(line.rstrip())

运行结果:
在这里插入图片描述
2.C语言学习笔记 :可使用方法replace() 将字符串中的特定单词都替换为另一个单词。下面是一个简单的示例,演示了如何将句子中的’dog’ 替换为’cat’ :
在这里插入图片描述
读取你刚创建的文件learning_python.txt中的每一行,将其中的Python都替换为另一门语言的名称,如C。将修改后的各行都打印到屏幕上。

with open('learning_python.txt') as file_object:
    contents=file_object.read()
    print(contents.replace('Python','C'))
 
10.2写入文件

1.写入空文件
将文本写入文件,在调用open() 时需要提供另一个实参,告诉Python要写入打开的文件。

filename='learning_python.txt'
with open(filename,'w')as file_object:
    file_object.write('i love programming.')

调用open() 时提供了两个实参
第一个实参也是要打开的文件的名称;
第二个实参(‘w’ )告诉Python,我们要以写入模式 写入模式 打开这个文件。
打开文件 时,可指定读取模式 读取模式 (‘r’ )、写入模式 写入模式 (‘w’ )、附加模式 附加模式 (‘a’ )或让你能够读取和写入文件的模式(‘r+’ )。
(Python默认是以只读方式打开文件)

2.写入多行
函数write() 不会在你写入的文本末尾添加换行,因此需要添加换行符。

filename = 'programming.txt' 
with open(filename, 'w') as file_object:    
    file_object.write("I love programming.\n")    
    file_object.write("I love creating new games.\n")

运行结果:
在这里插入图片描述

3.附加到文件
如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式 打开文件。
你以附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加 到文件末尾。如果指定的文件不存在,Python将为你创建一个空文件。

filename='programming.txt'
with open(filename,'a')as file_object:
    file_object.write('I also love finding meaning in large datases\n')
    file_object.write('I love creating apps that can run in a browser\n')

运行结果:
在这里插入图片描述

练习
访客 :编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件guest.txt中。

 filename='users.txt'
username=input('enetr users name')

with open(filename,'w')as file_object:
    file_object.write('用户名: '+username.title())

运行结果:
在这里插入图片描述

2.访客名单 :编写一个while 循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,并将一条访问记录添加到文件guest_book.txt中。确保这 个文件中的每条记录都独占一行。

filename='users.txt'

flag=True
while flag==True:
    username=input('enetr users name')
    greeting='hello, '+username+'.'
    print(greeting)
    temp=input('enter True to continue,or False to quit')
    if temp=='False':
        flag=False

    with open(filename,'a')as file_object:
        file_object.write(greeting.title()+'\n')

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值