• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
QQ糖_尤尤
博客园    首页    新随笔    联系   管理    订阅  订阅
10.1从文件中读取数据

10.1.1 读取整个文件

首先创建一个文件如:pi_digits.txt

下面的程序可以读取该文件,再将其内容显示到屏幕上:

1 with open("pi_digits.txt") as file_object:
2      contents=file_object.read()
3      print(contents)

运行结果:

>>> 
================== RESTART: F:/python学习/10/10.1/file_reader.py =================
3.1415926535
  8979323846
  2643383279
>>> 

说明:

1.使用方法read()读取文件(该文件如果与程序文件在同一目录下,直接使用文件名,否则需加绝对路径)。

2.关键字 with 在不再需要访问文件后将其关闭(你只管打开文件,并在需要时使用它,python自会在合适的时候自动将其关闭。)

3.使用关键字with与使用close()方法比较,避免了因为程序bug而导致close()语句未能执行文件不能关闭,导致文件丢失或受损,或程序中过早的调用close()语句,当需要调用文件时它已经关闭的情况。

 

10.1.2 文件路径

可以将需要读取的文件的准确位置(即绝对路径)告诉python,这样就不用关心当前 运行程序存储在什么地方了。

绝对路径通常比相对 路径更长,因此可以将其存储在一个变量中,再将该变量传递给open()会有所帮助。

file_path="f:/python学习/10/10.1/py_digist.txt"
with open(file_path) as file_object:

通过使用绝对路径,可读取系统任何地方的文件。

 

10.1.3 逐行读取

要以每次一行的方式检查文件,可对文件对象使用for 循环:

filename="pi_digits.txt"
with open(filename) as file_object:
     for line in file_object:
          print(line)

运行结果:

>>> 
================ RESTART: F:/python学习/10/10.1/file_readlines.py ================
3.1415926535

  8979323846

  2643383279
>>> 

说明:

1.第一行,把需要打开的文件名存储在一个变量中

2.使用with关键字让python负责妥善的打开和关闭文件。

问题:每打印一行时,发现多出一个空行。

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

解决方法:可以在print语句中使用rstrip()

优化后的代码如下:

filename="pi_digits.txt"
with open(filename) as file_object:
     for line in file_object:
          print(line.rstrip())

运行结果如下:

>>> 
================ RESTART: F:/python学习/10/10.1/file_readlines.py ================
3.1415926535
  8979323846
  2643383279
>>> 

 

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

 下面的示例在with代码块中将文件pi_digits.txt的各行存储在一外列表 中,再在with代码块外打印它们:

1 filename="pi_digits.txt"
2 with open(filename) as file_object:
3      lines=file_object.readlines()
4 for line in lines:
5      print(line.rstrip())

说明:readelines()方法实现从文件中读取每一行,并将其存储在一个列表中。

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()#将各行都加入pi_string,使用rstrip()方法删除每行末尾的换行符
print(pi_string)
print(len(pi_string))

运行结果:

>>> 
=================== RESTART: F:/python学习/10/10.1/pi_string.py ==================
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()#将各行都加入pi_string,使用strip()方法删除所有的空格
print(pi_string)
print(len(pi_string))

运行结果如下:

>>> 
=================== RESTART: F:/python学习/10/10.1/pi_string.py ==================
3.141592653589793238462643383279
32
>>> 

 10.1.6 包含一百万位的大型文件

对于可处理的数据量,python没有任何限制,只要系统的内存足够多,想处理多少数据都可以。

例:打印圆周率小数点后50位,打开的文件中包含精确到小数点合100位的圆周率。

代码如下:

filename="pi_ hundred_digits.txt"
with open(filename) as file_object:
     lines=file_object.readlines()
pi_string=""  #创建一个字符串变量,用于存储圆周率的值
for line in lines:
     pi_string+=line.strip()#将各行都加入pi_string,使用strip()方法删除所有的空格
print(pi_string[:52]+"...")#只打印出小数点后50位
print(len(pi_string))

运行结果:

>>> 
============== RESTART: F:/python学习/10/10.1/pi_ hundred_string.py ==============
3.14159265358979323846264338327950288419716939937510...
102
>>> 

10.1.7圆周率值中包含你的生日吗

如果你想知道自己的生日是否包含在圆周率中,可将生日表示为一个由数字组成的字符串,再检查这个字符串是否包含在pi_string中:

代码如下:

filename="pi_ hundred_digits.txt"
with open(filename) as file_object:
     lines=file_object.readlines()
pi_string=""  #创建一个字符串变量,用于存储圆周率的值
for line in lines:
     pi_string+=line.strip()#将各行都加入pi_string,使用strip()方法删除所有的空格

birthday=input("请输入你的生日:")#提示输入生日,以字符串形式。
if birthday in pi_string:  #检查这个字符串是否包含在pi_string中
     print("你的生日在圆周率的前100位之中!")
else:
     print("你的生日没有在圆周率的前100位之中!")

运行两次结果:

>>> 
============= RESTART: F:/python学习/10/10.1/birthday_in_pi_string.py ============
请输入你的生日:20010203
你的生日没有在圆周率的前100位之中!
>>> 
============= RESTART: F:/python学习/10/10.1/birthday_in_pi_string.py ============
请输入你的生日:79323
你的生日在圆周率的前100位之中!
>>> 

 

posted on 2021-09-04 10:31  QQ糖_尤尤  阅读(371)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3