【Python学习】从文件中读取数据

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:
form:《Python编程从入门到实践》
"""
10.1.1 读取整个文件
要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件,它包含精确到小数
点后30位的圆周率值,且在小数点后每10位处都换行:
pi_digits.txt
3.1415926535 
  8979323846 
  2643383279
下面的程序打开并读取这个文件,再将其内容显示到屏幕上:
with open('pi_digits.txt') as pi:
    contents = pi.read()
    print(contents)
函数open()接受一个参数:
要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。
关键字with在不再需要访问文件后将其关闭
当然不使用with语句,你也可以调用open()和close()来打开和关闭文件
相比于原始文件,该输出唯一不同的地方是末尾多了一个空行
3.1415926535
  8979323846
  2643383279

为何会多出这个空行呢?因
为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删
除多出来的空行,可在print语句中使用rstrip()
方法rstrip()删除(剥除)字符串末尾的空白
with open('pi_digits.txt', ) as pi:
    contents = pi.read()
    print(contents.rstrip())
现在,输出与原始文件的内容完全相同:
3.1415926535
  8979323846
  2643383279
10.1.2 文件路径
要让Python打开不与程序文件位于同一个目录中的文
件,需要提供文件路径,它让Python到系统的特定位置去查找。
由于文件夹text_files位于文件夹python_work中,因此可使用相对文件路径来打开该文件夹中
的文件。相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程序所在目
录的。在Linux和OS X中,你可以这样编写代码:
with open('text_files/filename.txt') as file_object:
    pass
这行代码让Python到文件夹python_work下的文件夹text_files中去查找指定的.txt文件。在
Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/):
with open('text_files\filename.txt') as file_object:
    pass
# 防止转义可以写成
with open(r'text_files\filename.txt') as file_object:
    pass
你还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在
什么地方了。这称为绝对文件路径。
绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open()会有
所帮助。在Linux和OS X中,绝对路径类似于下面这样:
file_path = '/home/ehmatthes/other_files/text_files/filename.txt'
with open(file_path) as file_object:
    pass
# 而在Windows系统中,它们类似于下面这样:
file_path = r'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:
    pass
10.1.3 逐行读取
读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以
某种方式修改文件中的文本。
要以每次一行的方式检查文件,可对文件对象使用for循环:
filename = 'pi_digits.txt'
with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip())
10.1.4 创建一个包含文件各行内容的列表
使用关键字with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外
访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用该
列表:
filename = 'pi_digits.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
    # readlines()从文件中读取每一行,并将其存储在一个列表中
for line in lines:
    print(line.rstrip())
10.1.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))
3.1415926535  8979323846  2643383279
36

在变量pi_string存储的字符串中,包含原来位于每行左边的空格,为删除这些空格,
可使用strip()而不是rstrip():
filename = 'pi_digits.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
pi_string = ''
for line in lines:
    pi_string += line.strip()

print(pi_string)
print(len(pi_string))
3.141592653589793238462643383279
32

10.1.6 圆周率值中包含你的生日吗
filename = 'pi_digits.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
pi_string = ''
for line in lines:
    pi_string += line.strip()

birthday = input("请输入您的生日,如20220202: ")
if birthday in pi_string:
    print('您的生日存在于圆周率中')
else:
    print('圆周率中未匹配到您的生日')

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖虎*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值