【Python】从文件中读取数据

从文件中读取数据

1.1 读取整个文件python

要读取文件,须要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下spa

PI_DESC.txtcode

3.1415926535
  8979323846
  2643383279
  5028841971

file_reader.py对象

with open("PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

咱们能够看出,读取文件时,并无使用colse()方法,那么未妥善的关闭文件,会不会致使文件收到损坏呢?在这里是不会的,由于咱们在open()方法前边引入了关键字with,该关键字的做用是:在不须要访问文件后将其关闭blog

1.2文件路径ip

程序在读取文本文件的时候,若是不给定路径,那么它会先在当前目录下进行检索,有时候咱们须要读取其余文件夹中的路径,例如:内存

image

如今文件PI_DESC.txt存储在文件夹txt中get

那么咱们读取文本内容的代码得修改成:it

with open("txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

给open参数传递的参数得给相对路径console

Linux与OS X中,路径使用斜杠(/)

Windows中,使用反斜杠(\),可是因为python中,反斜杠被视为转义字符,在Windows最好在路径开头的单(双)引号前加上r

相对路径:即相对于程序文件的路径

绝对路径:即文本在硬盘上存储的路径

使用绝对路径的程序怎么写呢 ?

with open(r"D:\python\txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

1.3逐行读取

读取文件时,可能须要读取文件中的每一行,要以每一行的方式来检查文件或者修改文件,那么能够对文件对象使用for循环

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)

程序运行结果以下:

image

经过运行结果咱们能够看出,打印结果中间有不少空白行,这些空白行是怎么来的呢?由于在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加一个换行符,所以每行末尾就有2个换行符:一个来自文件,另一个来自print,消除这些换行符,只须要使用方法rstrip()

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line.rstrip())

打印结果

image

1.4建立一个包含文件各行内容的列表

使用关键字with时,open()返回的文件对象只能在with代码块可用,若是要在with代码块外访问文件的内容,可在with块中将文件各行存储在一个列表,并在with代码块外使用该列表

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line.rstrip())

1.5使用文件的内容

在上面一节中咱们提到把数据提取到内存中,那么咱们就能够对数据进行为所欲为的操做了

须要:将圆周率连在一块儿打印出来(删除空格),并打印其长度

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

pi_str = ''
for line in lines:
    pi_str += line.strip()
print(pi_str.rstrip())
print(len(pi_str.rstrip()))

注意最后print语句并无缩进,若是是缩进的话就会每取一行打印一次

打印效果以下

image

1.5大文件的读取

在这里我先用圆周率前10000位作实验,也算不上大文件,只是相对来讲是大文件

附件下载地址:点击下载

为了避免显示圆周率一万位,形成console不停的闪烁,咱们只显示前20位

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

pi_str = ''
for line in lines:
    pi_str += line.strip()
print(pi_str[:20].lstrip())
相关文章
相关标签/搜索