Python如何从文件中读取数据

从文件中读取数据
1. 阅读整个文件
要阅读文件,首先要创建一个文件:
然后打开并读取文件,然后在屏幕上显示其内容:
file_reader.py
withopen('pi_digits.txt')asfile_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__filedigits.txt,此时需要这样编写代码:
withopen('text_files\pi_digits.txt')asfile_object:2. 绝对文件路径 -> 文件所在的完整路径。绝对路径比相对路径长,因此可以将路径存储在变量中,然后将变量传递给变量 open( ):
file_path=r'C:\Users\yxf\Desktop\python_pycharm\text_files\pi_digits.txt' withopen(file_path)asfile_object:
由于文件路径采用反斜杠,在python中被视为转义字符,因此需要在开头的单引号前添加r。
相关推荐:Python视频教程
3. 逐行读取
每次以一行的方式检查文件:
file_name='pi_digits.txt' withopen(file_name)asfile_object: forlineinfile_object: print(line)
运行结果:
3.1415926535 8979323946 2643383278
文件中的每一行都是通过使用for循环对文件对象进行的,但是运行结果显示的每一行后面都有空白行。为什么?文件中每行末尾都有一个看不见的换行符,print语句中也会添加一个换行符。为了消除这些空白行,可以在print语句中使用 rstrip( ):
print(line.rstrip())
这样,输出与文件内容完全相同。
4. 创建包含文件各行内容的列表
file_name='pi_digits.txt' withopen(file_name)asfile_object: lines=file_object.readlines() forlineinlines: print(line.rstrip())
方法readlines():读取文件中的每一行,并将其存储在列表中。
5. 使用文件的内容
file_name='pi_digits.txt' withopen(file_name)asfile_object: lines=file_object.readlines()#将文件内容存储在列表中 pi_string=''#新建空字符串 forlineinlines: pi_string=pi_string+line.rstrip()#删除空白行并将其转换为字符串 print(pi_string)#打印字符串 print(len(pi_string))#打印字符串长度
运行结果:
3.141592653589793239462643383278 36
运行结果包括位于每行左侧的空间。为了删除这些空间,可以使用 strip() 而不是 rstrip(),可以操作:
3.141592653589793239462643383278 32
6. 大数据包含100万人
下载100万个文件太慢,复制使用其中一小部分,打印到小数点后的50个:
file_name='pi_xx_digits.txt' withopen(file_name)asfile_object: lines=file_object.readlines()#将文件内容存储在列表中 pi_string=''#新建空字符串 forlineinlines: 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'
withopen(file_name)asfile_object:
lines=file_object.readlines()
pi_string=''
forlineinlines:
pi_string=pi_string+line.strip()
birthday=input('Enteryourbirthday,intheformmmddyy:')
ifbirthdayinpi_string:
print('Yourbirthdayapearsinthefirst1483digitsofi!')
else:
print('Yourbirthdaydoesnotappearsinthefirst1483digitsofpitsofpit.') 