Python如何从文件中读取数据

从文件中读取数据

1. 读取整个文件

要读取文件,首先来创建一个文件:

然后打开并读取这个文件,再将其内容显示到屏幕上:

复制代码
file_reader.py
with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents)

解读上述代码:

open( ) -> 要以任何方式使用文件,都首先得打开文件,这样才能访问它,此时就需要用到函数open(),该函数只接受一个参数:要打开文件的名称,同时返回表示文件的对象。

with: 不再需要访问文件后调用 close( ) 将其关闭。

read( ) ->读取文件中的全部内容。

运行结果:

复制代码
3.1415926535
  8979323946
  2643383278

2. 文件路径

要让python打开不与程序文件位于同一目录中的文件,需要提供文件路径,让python到系统的特定位置去查找。

文件路径的表示:

  1. 相对路径 -> 文件相对于当前运行程序所在的目录。eg. 在程序所在文件夹C:\Users\yxf\Desktop\python_pycharm新建一个文件夹text_file用于存储文件pi_digits.txt,此时就需要这样编写代码:
复制代码
with open('text_files\pi_digits.txt') as file_object:
  1. 绝对文件路径 -> 文件所在完整路径。绝对路径比相对路径更长,故可将路径存储在一个变量中,再将变量传递给 open( ):
复制代码
file_path = r'C:\Users\yxf\Desktop\python_pycharm\text_files\pi_digits.txt'
with open(file_path) as file_object:

由于文件路径中使用的是反斜杠,在python中被视为转义字符,故需要在开头的单引号前加上r。

3. 逐行读取

每次以一行的方式检查文件:

复制代码
file_name = 'pi_digits.txt'
with open(file_name) as file_object:
    for line in file_object:
        print(line)

运行结果:

复制代码
3.1415926535
  8979323946
  2643383278

通过对文件对象使用for循环来遍历文件中的每一行,但运行结果显示的每一行后边多了空白行,这是为什么呢?文件中每行的末尾都有一个看不见的换行符,而print语句也会加上一个换行符。为消除这些空白行,可在print语句中使用 rstrip( ):

print(line.rstrip())

这样输出与文件内容就完全相同了。

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

复制代码
file_name = 'pi_digits.txt'
with open(file_name) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line.rstrip())

方法readlines():从文件中读取每一行,并将其存储在列表中。

5. 使用文件的内容

复制代码
file_name = 'pi_digits.txt'
with open(file_name) as file_object:
    lines = file_object.readlines()    # 将文件内容存储在列表中
pi_string = ''    # 新建一个空字符串
for line in lines:
    pi_string = pi_string + line.rstrip()    # 删除空白行并转换为字符串
print(pi_string)    # 打印字符串
print(len(pi_string))    # 打印字符串长度

运行结果:

复制代码
3.1415926535  8979323946  2643383278
36

运行结果中包含了位于每行左边的空格,为删除这些空格,可使用 strip() 而不是 rstrip(),运行可得:

复制代码
3.141592653589793239462643383278
32

6. 包含一百万位的大型数据

一百万位的文件下载过慢,就复制使用了其中的一小部分,并打印到小数点后的50位:

复制代码
file_name = 'pi_xx_digits.txt'
with open(file_name) as file_object:
    lines = file_object.readlines()  # 将文件内容存储在列表中
pi_string = ''  # 新建一个空字符串
for line in lines:
    pi_string = pi_string + line.strip()  # 删除空白行并转换为字符串
print(pi_string[: 52])  # 打印字符串
print(len(pi_string))  # 打印字符串长度

运行结果:

复制代码
3.14159265358979323846264338327950288419716939937510
1483

由运行结果可知保存了小数点后的1481位在文件 pi_xx_digits.txt 中。

7. 圆周率中包含你的生日吗

可以检测圆周率值的前1483位中是否包含自己的生日:

复制代码
file_name = 'pi_xx_digits.txt'
with open(file_name) as file_object:
    lines = file_object.readlines()
pi_string = ''
for line in lines:
    pi_string = pi_string + line.strip()
birthday = input('Enter your birthday, in the form mmddyy: ')
if birthday in pi_string:
    print('Your birthday appears in the first 1483 digits of pi!')
else:
    print('Your birthday does not appears in the first 1483 digits of pi.')
相关推荐
南笙北梦6 分钟前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!16 分钟前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net
钱栈up1 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析
黄权光1 小时前
AI智能体项目实战记录(01):开发环境搭建之conda的安装与配置
python
Wokoo71 小时前
Selenium 核心 API 解析(三)
python·功能测试·selenium
在世修行1 小时前
智学文枢:技术选型
python·技术选型
程序喵大人1 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
用户8356290780511 小时前
如何使用 Python 将 PDF 转换为 PPTX 文件
后端·python
微三云 - 廖会灵 (私域系统开发)1 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
学逆向的2 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全